普通闭包写法:
let closure = { (data, error) in
if let data = data {
// handle data
}
}
使用闭包延迟求值:
lazy var titleLabel = { () -> UILabel in
let lable = UILabel()
lable.font = .systemFont(ofSize: 13)
lable.textColor = .systemOrange
lable.textAlignment = .justified
return lable
}()
自动闭包 @autoclosure
修饰符,用于函数参数类型修饰,表示接受的类型是一个闭包或者是与闭包的返回类型相同的值。
void set(value: @autoclosure () -> String, for key: String) {
print("value is: \(value())")
}
// 使用的时候,可以直接传 String 类型给 value
set(value: "abc", for: "name")
使用 @convention
声明闭包的兼容性:
@convention(swift)
Swift 类型的闭包@convention(block)
兼容 ObjC 的 Block@convention(c)
兼容 C 函数指针
参考资料
https://docs.swift.org/swift-book/LanguageGuide/Closures.html