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 }
}
或者,如果您不需要“stop”参数:
addressString.enumerateLines { (line, _) in
print(line)
}
关于swift - 在 Swift 中使用 String 的 enumerateLines 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25096128/