Swift的String类型的enumerateLines函数声明如下:
enumerateLines(body: (line: String,inout stop: Bool) -> ())
据我了解,这个声明意味着:“enumerateLines是一个带闭包的函数,body,它传递两个变量,line和stop,并返回void.”
根据Swift Programming Language book,我相信我应该能够以一个简洁的简洁方式调用enumerateLines并使用尾随闭包,如下所示:
var someString = "Hello" someString.enumerateLines() { // Do something with the line here }
..但是会导致编译错误:
元组类型'(line:String,inout stop:Bool)’和'(”具有不同数量的元素(2对0)
那么我尝试显式地放入参数,并取消尾随闭包:
addressString.enumerateLines((line: String,stop: Bool) { // Do something with the line here })
…但是会导致错误:
‘(() – >() – > $T2) – > $T3’与'(line:String.Type,stop:Bool.Type)不同
简而言之,我尝试过的语法没有导致任何可以成功编译的语法.
任何人都可以在我的理解中指出错误并提供一个可行的语法吗?我正在使用Xcode 6 Beta 4.
closure expression syntax具有一般形式
{ (parameters) -> return type in statements }
在这种情况下:
addressString.enumerateLines ({ (line: String,inout stop: Bool) -> () in println(line) })
或者,使用尾随闭包语法:
addressString.enumerateLines { (line: String,inout stop: Bool) in println(line) }
由于自动类型推断,这可以缩短为
addressString.enumerateLines { line,stop in println(line) }
Swift 3更新:
addressString.enumerateLines { (line,stop) in print(line) // Optionally: if someCondition {stop = true } }
或者,如果您不需要“停止”参数:
addressString.enumerateLines { (line,_) in print(line) }