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)不同
简而言之,我尝试过的语法没有导致任何可以成功编译的语法.
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) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。