gpt4 book ai didi

swift - 在 Swift 中使用 String 的 enumerateLines 函数

转载 作者:搜寻专家 更新时间:2023-10-30 22:26:38 26 4
gpt4 key购买 nike

Swift 的String 类型的enumerateLines 函数声明如下:

enumerateLines(body: (line: String, inout stop: Bool) -> ())

据我了解,此声明的意思是:“enumerateLines 是一个采用闭包 body 的函数,它被传递给两个变量,linestop,并返回 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com