微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐