我注意到assert在Swift中编写第一个值时输入为
@autoclosure() -> Bool
Run Code Online (Sandbox Code Playgroud)
用重载方法返回一个通用T值,通过它来测试存在LogicValue protocol.
但严格坚持手头的问题.它似乎想要一个@autoclosure返回一个Bool.
编写一个不带参数并返回Bool的实际闭包不起作用,它要我调用闭包使其编译,如下所示:
assert({() -> Bool in return false}(), "No user has been set", file: __FILE__, line: __LINE__)
Run Code Online (Sandbox Code Playgroud)
然而,简单地通过Bool工作:
assert(false, "No user has been set", file: __FILE__, line: __LINE__)
Run Code Online (Sandbox Code Playgroud)
那么发生了什么?什么是@autoclosure?
编辑: @auto_closure已重命名@autoclosure
在许多项目中,这种控制结构是可读性的理想选择:
forCount( 40 )
{
// this block is run 40 times
}
Run Code Online (Sandbox Code Playgroud)
你可以 在objective-C中做到这一点.
鉴于Swift 对宏的方法与 objective-c的方法截然不同,
有没有办法forCount(40)在Swift项目中创建这样的控制结构?
Swift中的一些类似概念:
for _ in 1...40
{ // this block is run 40 times }
Run Code Online (Sandbox Code Playgroud)
40.times
{ // this block is run 40 times }
Run Code Online (Sandbox Code Playgroud)