Swift中文教程(四)--函数与闭包

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

Function 函数

Swift使用func关键字来声明函数,函数通过函数名加小括号内的参数列表来调用。使用->来区分参数名和返回值的类型:

1func greet(name: String, day: String) ->String {2return"Hello \(name), today is \(day)."3}4greet("Bob","Tuesday")

练习:

remove day参数,增加一个参数,比如:今天的午餐特色菜~

1func greet(name:String, day:String) ->String{23return"Hello \(name), today is \(day)."//第二章说过用\()来内嵌变量45}67greet('Joe','菩提玉斋')

函数使用元组(tuple)来返回多个值:

1func getGasprices() ->(Double, Double, Double) {2return(3.59, 3.69, 3.79)3}4getGasPRices()

函数还可以接收可变的参数个数,将这些参数收集在数组里面:

1func sumOf(numbers: Int...) ->Int {2var sum =03fornumberinnumbers {4sum +=number5}6returnsum7}8sumOf()9sumOf(42, 597, 12)

练习:

编写一个函数并求出其参数的平均值。

函数是可以嵌套的,嵌套过的函数可以访问到外部函数声明过的变量,使用函数嵌套可以便于你组织过长或复杂的函数:

1func returnFifteen() ->Int {2var y = 103func add() {4y += 55}6add()7returny8}9returnFifteen()

在Swift中,函数是第一等类型,这意味着一个函数可以将另外一个函数作为它的返回值:

1func makeIncrementer() -> (Int ->Int) {2func addOne(number: Int) ->Int {3return1 +number4}5returnaddOne6}7var increment =makeIncrementer()8increment(7)

函数还能接收其它函数作为它的参数:

1func hasAnyMatches(list: Int[], condition: Int -> Bool) ->Bool {2foriteminlist {3ifcondition(item) {4returntrue5}6}7returnfalse8}9func lessThanTen(number: Int) ->Bool {10returnnumber < 1011}12var numbers = [20, 19, 7, 12]13hasAnyMatches(numbers, lessThanTen)

Closure 闭包

函数其实是一种闭包的特殊情况,你可以写一个用花括号{}包裹的匿名闭包,用in来区分参数与主体的返回类型:

1numbers.map({2(number: Int) -> Intin3let result = 3 *number4returnresult5})

练习:

重写这个闭包来对所有奇数返回0

闭包有多种简洁的写法。当返回值类型已知时,比如委托回调,你就可以省略它的参数类型,它的返回值类选,或者二者都略去,单行语句的闭包可以直接隐式地返回此一语句的值:

1numbers.map({ numberin3 * number })

你可以通过数字而不是名字来引用一个参数,这对于很短的闭包非常有用。一个闭包通过圆括号传递其最后一个参数到函数能立即生效:

1sort([1, 5, 3, 12, 2]) { $0 > $1 }

谢谢,Swifter-QQ群:362232993,同好者进~

github地址:https://github.com/Joejo/Swift-lesson-for-chinese

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航