在用 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