农家乐网站建设方案/广州全网推广
4.1.8函数的嵌套
一个函数也可以写在其它函数之中,来封装一个嵌套函数,用以实现仅在一定范围内起到作用的功能:
func chooseNumber(needBigger:Bool, number1:Int, number2:Int){func getSmaller(){print ((number1 < number2) ? number1: number2)}func getBigger(){print ((number1 > number2) ? number1: number2)}needBigger ? getBigger : getSmaller}
在第一行代码中定义了一个名为chooseNumber的函数,由其布尔类型的参数needBigger决定采用该函数中的哪个子函数,以实现子函数对应的功能。
接着在第3至10行代码中,依次定义了两个子函数getSmaller和getBigger,其功能依次是获得父函数中的两个参数中的较小的值和较大的值,并将它们在控制台打印输出。
然后在第11行代码中,通过用户指定的needBigger布尔值,执行相应的子函数。
需要注意的事,被嵌套的子函数,只能在其父函数的内部使用,在父函数的外部是无法被调用的。
4.1.9函数的递归用法
递归函数即自调用函数,该函数可以在函数体的内部,直接或间接地调用函数自身,即函数的嵌套调用是函数的本身:
func recursion(n: Int) ->Int{if n <= 1{return 1}else{return recursion(n: n-1) + recursion(n:n-2)}}print(recursion(n: 5)) //输出结果为:8
在第一行的代码中,定义了一个名为recursion的递归函数,它包含一个整型参数,并且拥有一个整型的返回值。
在第3至10行代码中,当参数小于或等于1时,返回1并中止该函数的执行。否则执行第9行的代码,即将参数减1和减2之后的结果进行相加。
最后在第12行将最终的结果在控制台打印输出,其结果为8。
从Playground中可以看出,第14行的递归语句执行了7次,导致第10行的返回1的语句被执行了8次,从而使8个1相加,得到结果为8,如图4-1-1所示:
图4-1-1
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰、明了。
4.1.10常用的内置函数
Swift包含了众多的内置函数,接下来为您介绍部分非常实用的内置函数,它们会在日常工作中为您提供非常大的帮助。
abs绝对值函数
绝对值函数,用来返回指定参数的正值。当参数为负数时,返回对应的正数,当参数为正数时,结果将保持不变:
print(abs(-1)) //输出结果为:1
min最小值函数
最小值函数,用来返回不定数量的参数之间的最小值:
print(min(8, 2, 3)) //输出结果为:2
max最大值函数
最大值函数,用来返回不定数量的参数之间的最大值:
print(min(8, 2, 3, 10)) //输出结果为:10
filter函数
Filter函数通常用于查找在数组元素中,满足指定条件的元素,例如查找1至10之间的可以被数字3整除的数字:
for i in (1...10).filter({$0 %3 == 0})
{print(i)
}
在第一行的代码中,{$0 % 3 == 0}为筛选闭包,这里忽略了参数名,而使用默认参数$0,返回类型隐式推断为Bool类型。最终在控制台输出结果为:
3
6
9
map函数
map函数通常用于将数组中的每个元素,通过指定的方法进行转换。例如将一个整数数组中的每个数字乘以3:
for i in (1...4).map({$0 * 3})
{print(i)
}
在上面的代码中,同样通过一个闭包语句:{$0 * 3},将(1…4)数组中的每个整数进行乘以3的操作,最终在控制台的输出结果为:
3
6
9
12
reduce函数
reduce函数可以把数组元素组合计算为一个值,比如将数组中的每个数字进行相加,从而获得数组中所有元素之和:
let result = (1...4).reduce(0,combine: {$0 + $1})
print(result) //输出结果为10
在第一行的代码中,reduce函数的第一个参数为起始值,这里设置起始值为0。即将0与1,2,3,4四个数字进行相加,所以结果为10。
另外,reduce方法可以进行进一步的简化,将{$0+ $1},缩写为+即可:
let result = (1...4).reduce(0,combine: +)
print(result) //输出结果为10
如果需要计算数组中所有元素的积,可以将加号+修改为*,同时还需要将起始值从0修改为1,不然进行乘积计算的结果将是0:
let result = (1...4).reduce(0, combine:*)
print(result) //输出结果为24
新 作
iOS开发中的神兵利器
共140节课程,讲解GitHub中近百个过千star的iOS热门开源项目
市面上唯一大规模讲解GitHub中热门的iOS开源项目的教程
快速、优雅地解决iOS开发工作中遇到的各种棘手问题
视频观看地址:http://study.163.com/course/courseMain.htm?courseId=1003657013
互动教程下载地址:https://itunes.apple.com/cn/app/id1209739676