Swift封闭基础
示例
闭包(也称为块或lambda)是可以在程序内存储和传递的代码段。
let sayHi = { print("Hello") }
// The type of sayHi is "() -> ()", aka "() -> Void"
sayHi() // prints "Hello"与其他函数一样,闭包可以接受参数并返回结果或引发错误:
let addInts = { (x: Int, y: Int) -> Int in
return x + y
}
// The type of addInts is "(Int, Int) -> Int"
let result = addInts(1, 2) //结果是3
let divideInts = { (x: Int, y: Int) throws -> Int in
if y == 0 {
throw MyErrors.DivisionByZero
}
return x / y
}
// The type of divideInts is "(Int, Int) throws -> Int"闭包可以从其范围捕获值:
//该函数返回另一个返回整数的函数
func makeProducer(x: Int) -> (() -> Int) {
let closure = { x } //x被闭包捕获
return closure
}
//这两个函数调用使用完全相同的代码,
//但是每个闭包具有不同的值。
let three = makeProducer(3)
let four = makeProducer(4)
three() //返回3
four() //返回4闭包可以直接传递给函数:
let squares = (1...10).map({ $0 * $0 }) //返回[1、4、9、16、25、36、49、64、81、100]
let squares = (1...10).map { $0 * $0 }
NSURLSession.sharedSession().dataTaskWithURL(myURL,
completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) in
if let data = data {
print("Request succeeded, data: \(data)")
} else {
print("Request failed: \(error)")
}
}).resume()