在Swift中使用String的enumerateLines函数

前端之家收集整理的这篇文章主要介绍了在Swift中使用String的enumerateLines函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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)
}

猜你在找的Swift相关文章