使用NSStringEnumerationOptions.byWords -Swift 4.2获取错误



我正在尝试将此Extension添加到我的代码中,以便通过单词枚举列出子字符串。该代码的来源日期为2015年,因此这显然是Swift的较早版本。我正在使用Swift4.2,我无法弄清楚如何在下面的注释中正确更新代码。

extension String {
    func words() -> [String] {
        let range = Range<String.Index>(start: self.startIndex, end: self.endIndex) // THIS LINE CAUSES ERROR
        var words = [String]()
        self.enumerateSubstringsInRange(range, options: NSStringEnumerationOptions.ByWords) { (substring, _, _, _) -> () in
            words.append(substring)
        }
        return words
    }
}

我最初会得到此错误:呼叫中的不正确参数标签(有'start:end:end:',预期'_:in:in:')

我遵循"修复"提示,它将行更改为:

let range = Range<String.Index>(self.startIndex, in: self.endIndex)

然后,我遇到此错误而没有修复建议:

无法将类型'string.Index'的值转换为预期参数类型'nsrange'(aka'_nsrange')

错误可能是由于Swift版本更新,我无法找到编写此行的正确方法。

自swift3:

以来,范围方法语法中的枚举substring已改变了一点

新声明:

func enumereratesubstrings(在范围:r,选项选择: string.enumerationOptions =默认,_ body:@escaping(string?,, 范围,范围,inout bool) -> void)其中r :range expression,r.bound == string.index

extension String {
    func words() -> [String] {
        var words = [String]()
        enumerateSubstrings(in: startIndex..., options: .byWords) { substring, _, _, _ in
            words.append(substring!)
        }
        return words
    }
}

"abc def".words()  //  ["abc", "def"]

请注意,在Swift 4或更高版本中,您应该扩展StringProtocol而不是String本身,以支持Substring S。您可以在我在此处发布的答案

检查如何实现它

最新更新