Swift 中的闭包(Closure)

Aug 17, 2022 • 预计阅读时间 1 分钟

普通闭包写法:

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

Swift
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

Git 的稀疏检出(Sparse checkout)功能

Swift 中的 Any 和 AnyObject