在用 Swift 编写 assert
时,我注意到第一个值的类型为
@autoclosure() -> Bool
使用重载方法返回一个通用的 T
值,通过 LogicValue
protocol
测试是否存在。
然而,严格地坚持手头的问题。它似乎想要一个返回一个 Bool
的 @autoclosure
。
编写一个实际的闭包,不接受任何参数,并返回一个 Bool,这是行不通的,它希望我调用闭包来编译它,像这样:
assert({() -> Bool in return false}(), "No user has been set", file: __FILE__, line: __LINE__)
然而,简单地传递一个布尔函数是可行的:
assert(false, "No user has been set", file: __FILE__, line: __LINE__)
到底是怎么回事? 什么是 @autoclosure
?
编辑: @auto_closure
更名为 @autoclosure