问题 拆分现在抱怨失踪“isSeparator”


在Swift 1.2的最新升级之后,我无法弄清楚如何将一行文本拆分成单词。我曾经这样做过:

let bits = split(value!, { $0 == " "}, maxSplit: Int.max, allowEmptySlices: false)

但那不再有效,因为......

Cannot invoke 'split' with an argument list of type '(String, (_) -> _, maxSplit: Int, allowEmptySlices: Bool)'

嗯,好吧,即使我可以上次建造?好吧,我们试试......

let bits = split(value!, { $0 == " "})

那个和我能想到的其他版本最终都说:

Missing argument for parameter 'isSeparator' in call

让我们听听它测试新的编程语言!好极了!

谁知道1.2的正确秘诀?


7709
2018-02-25 18:25


起源



答案:


似乎Swift 1.2中参数的顺序发生了变化:

let bits = split(value!, maxSplit: Int.max, allowEmptySlices: false,
                 isSeparator: { $0 == " "})

或者,使用默认值:

let bits = split(value!, isSeparator: { $0 == " "})

谓词现在是最后一个参数,需要外部参数 参数名称 isSeparator 因为它前面是可选参数。

这种变化的好处是你可以使用 尾随封闭 句法

let bits = split(value!, maxSplit: Int.max, allowEmptySlices: false) { $0 == " " }

要么

let bits = split(value!) { $0 == " " }

16
2018-02-25 18:34



LOLZ。谢谢Apple。而非讽刺的感谢马丁,这确实解决了这个问题。 - Maury Markowitz
是的,谢谢Apple。分裂函数的改变可能导致我在发布模式构建时遇到的特别讨厌的错误(请参阅我的答案: stackoverflow.com/questions/29107277/...)。 - Mike Taverne


答案:


似乎Swift 1.2中参数的顺序发生了变化:

let bits = split(value!, maxSplit: Int.max, allowEmptySlices: false,
                 isSeparator: { $0 == " "})

或者,使用默认值:

let bits = split(value!, isSeparator: { $0 == " "})

谓词现在是最后一个参数,需要外部参数 参数名称 isSeparator 因为它前面是可选参数。

这种变化的好处是你可以使用 尾随封闭 句法

let bits = split(value!, maxSplit: Int.max, allowEmptySlices: false) { $0 == " " }

要么

let bits = split(value!) { $0 == " " }

16
2018-02-25 18:34



LOLZ。谢谢Apple。而非讽刺的感谢马丁,这确实解决了这个问题。 - Maury Markowitz
是的,谢谢Apple。分裂函数的改变可能导致我在发布模式构建时遇到的特别讨厌的错误(请参阅我的答案: stackoverflow.com/questions/29107277/...)。 - Mike Taverne