Swift新手入门—函数

来源:互联网 发布:kar软件下载 编辑:程序博客网 时间:2024/04/29 06:46


Functions and Closures  函数和封闭性(闭包)


Functions  函数的使用

Swift中的函数定义和OC中有明显的区别了,使用func定义函数,在括号中定义参数和类型,用 -> 定义返回值类型

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. func greet(name: String, day: String) -> String {  
  2.     return "Hello \(name), today is \(day)."  
  3. }  
  4. greet("Bob""Tuesday")  

使用一个元组 ()用来返回多个返回值

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. func getGasPrices() -> (Double, Double, Double) {  
  2.     return (3.593.693.79)  
  3. }  
  4. getGasPrices()  

函数还可以有可变数量的参数(一般这种情况传进去个数组就好吧),注意是三个点哦  ...

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. func sumOf(numbers: Int...) -> Int {  
  2.     var sum = 0  
  3.     for number in numbers {  
  4.         sum += number  
  5.     }  
  6.     return sum  
  7. }  
  8. sumOf()  
  9. sumOf(4259712)  

函数还可以进行嵌套,嵌套的函数可以访问外部函数的变量

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. func returnFifteen() -> Int {  
  2.     var y = 10  
  3.     func add() {  
  4.         y += 5  
  5.     }  
  6.     add()  
  7.     return y  
  8. }  
  9. returnFifteen()  

新特性:Swift定义了函数也是一种类型,也即是说可以定义一个函数变量,某个函数的返回值可以是一个函数

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. func makeIncrementer() -> (Int -> Int) {  
  2.     func addOne(number: Int) -> Int {  
  3.         return 1 + number  
  4.     }  
  5.     return addOne  
  6. }  
  7. var increment = makeIncrementer()  
  8. increment(7)  

函数可以将另外一个函数作为它的一个参数

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  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 < 10  
  11. }  
  12. var numbers = [20197, 12]  
  13. hasAnyMatches(numbers, lessThanTen)  


Closures  闭包的使用

函数其实是闭包的一种情况,你可以定义一个没有名字的闭包,只需要用大括号 { } 将闭包括起来,使用  in 来划分变量和返回值 (其实功能就类似OC中的Block)

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. numbers.map({  
  2.     (number: Int) -> Int in  
  3.     let result = 33 * number  
  4.     return result  
  5.     })  

你可以省略参数类型和返回值让上面的闭包更加简介,只有一条语句的闭包直接返回这条语句执行的结果

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. numbers.map({ number in 33 * number })  

你还可以在括号后面写闭包

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. sort([15312, 2]) { $0 > $1 }  

下一节我们说说对象和类

0 0