《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
- 《iOS移动开发从入门到精通》图书连载19:函数的嵌套
- 《iOS移动开发从入门到精通》图书连载17:函数的定义和调用
- 《iOS移动开发从入门到精通》图书连载18:函数作为参数和返回类型
- 《iOS移动开发从入门到精通》图书连载4:iOS应用的生命周期
- 《iOS移动开发从入门到精通》图书连载7:iOS模拟器的使用
- 《iOS移动开发从入门到精通》图书连载5:Xcode 8的使用(上)
- 《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)
- 《iOS移动开发从入门到精通》图书连载9:Swift的基本概念(下)
- 《iOS移动开发从入门到精通》图书连载2:如何成为一名iOS开发者
- 《iOS移动开发从入门到精通》图书连载3:如何创建一个基本的iOS项目?
- 《iOS移动开发从入门到精通》图书连载11:字符和字符串
- 《iOS移动开发从入门到精通》图书连载15:数组
- 《iOS移动开发从入门到精通》图书连载16:字典
- 《iOS移动开发从入门到精通》图书连载20:枚举
- 《iOS移动开发从入门到精通》图书连载6——Xcode8的使用(下)
- 《iOS移动开发从入门到精通》图书连载13:for循环、while循环语句、repeat-while循环语句
- 《iOS移动开发从入门到精通》图书连载一:如果你也想开发一款自己的APP,可以看一下这篇文章
- 《iOS移动开发从入门到精通》图书连载10:布尔类型、Int类型及实例属性、浮点类型及实例属性
- final关键字--Java基础052
- bzoj1019 [SHOI2008]汉诺塔
- MySQL存储引擎总结
- SRM 551 ColorfulCupcakesDivTwo
- 011213笔记
- 《iOS移动开发从入门到精通》图书连载19:函数的嵌套
- Android自定义捕获Application全局异常
- RxAndroid和RxJava的资料分享
- 总结
- 贪心—最少拦截系统
- Android微信智能心跳方案(转)
- 创建对象之构造函数模式
- 04-android生命周期
- 清北学堂游记(2)