《iOS移动开发从入门到精通》图书连载19:函数的嵌套

来源:互联网 发布:行知中学住宿条件 编辑:程序博客网 时间:2024/06/11 23:23

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




0 0
原创粉丝点击