首页 > 学院 > 开发设计 > 正文

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

2019-11-14 20:26:32
字体:
来源:转载
供稿:网友

Function 函数

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

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

练习:

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

1 func greet(name:String, day:String) -> String{2 3   return "Hello /(name), today is /(day)."  //第二章说过用/()来内嵌变量4 5 }6 7 greet('Joe', '菩提玉斋')

 

 

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

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

 

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

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

练习:

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

 

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

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

 

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

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

 

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

 1 func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool { 2     for item in list { 3         if condition(item) { 4             return true 5         } 6     } 7     return false 8 } 9 func lessThanTen(number: Int) -> Bool {10     return number < 1011 }12 var numbers = [20, 19, 7, 12]13 hasAnyMatches(numbers, lessThanTen)

  

  Closure 闭包

  

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

1 numbers.map({2     (number: Int) -> Int in3     let result = 3 * number4     return result5     })

练习:

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

 

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

1 numbers.map({ number in 3 * number })

 

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

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

 

 

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

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

 

 

 

 

 

 

 

 


上一篇:Swift_1

下一篇:UITableView分隔线

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表