函数
Swift使用func关键字声明函数:
func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)." } greet("Bob", "Tuesday")
通过元组(Tuple)返回多个值:
func getGasPrices() -> (Double, Double, Double) { return (3.59, 3.69, 3.79) } getGasPrices()
支持带有变长参数的函数,用一个数组来获取它们:
func sumOf(numbers: Int...) -> Int { var sum = 0 for number in numbers { sum += number } return sum } sumOf() sumOf(42, 597, 12)
函数也可以嵌套函数:
func returnFifteen() -> Int { var y = 10 func add() { y += 5 } add() return y } returnFifteen()
作为头等对象,函数既可以作为返回值,也可以作为参数传递:
// 做返回值 func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne } var increment = makeIncrementer() increment(7) // 做参数 func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool { for item in list { if condition(item) { return true } } return false } func lessThanTen(number: Int) -> Bool { return number < 10 } var numbers = [20, 19, 7, 12] hasAnyMatches(numbers, lessThanTen)
闭包
本质来说,函数是特殊的闭包,Swift中可以利用{}声明匿名闭包:
numbers.map({ (number: Int) -> Int in let result = 3 * number return result })
如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回。
numbers.map({ number in 3 * number })
你可以通过参数位置而不是参数名字来引用参数——这个方法在非常短的闭包中非常有用。 当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面。
sort([1,5,3,12,2]){$0>$1}
闭包其实是 Swift 的一种类型,写作()->(),那么他就可以当做 func 的参数嵌套了。写成这样:
140 func exec(repeat: Int, block:()->()) 141 { 142 for i in 1...repeat{ 143 block() 144 } 145 } 146 147 exec(10, {println("Hello World")})
Swift 还提出了一个特殊的词汇:Trailing Closures,他的意思是:如果闭包是func的最后一个传参,那么他可以写在外面。如下:
148 func exec(repeat: Int, block:()->()) 149 { 150 for i in 1...repeat{ 151 block() 152 } 153 } 154 155 exec(10){ 156 println("Hello World") 157 }
时间: 2024-10-06 04:50:33