首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSStringEnumerationOptions.ByWords -SWIFT4.2获取错误

使用NSStringEnumerationOptions.ByWords -SWIFT4.2获取错误
EN

Stack Overflow用户
提问于 2019-03-10 03:09:54
回答 1查看 260关注 0票数 0

我试图将这个Extension添加到我的代码中,以便通过单词枚举子字符串。这段代码的来源是2015年,所以这显然是Swift的早期版本。我使用的是Swift4.2,我不知道如何正确地更新下面一行的代码。

代码语言:javascript
复制
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:',预期的'_:in:')

我遵循"Fix“提示符,它将行更改为:

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

然后,我在没有修正建议的情况下得到了这个错误:

不能将'String.Index‘类型的值转换为预期的参数类型'NSRange’(又名'_NSRange')

这些错误可能是由于Swift版本更新造成的,我无法找到正确的方法来编写这一行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-10 03:18:54

自Swift3以来,range方法语法中的枚举子字符串发生了一些变化:

新宣言:

func enumerateSubstrings(范围: R,options选项: String.EnumerationOptions = default,_ body:@转义(String?,Range,Range,inout Bool) -> Void),其中R: RangeExpression,R.Bound == String.Index

代码语言:javascript
复制
extension String {
    func words() -> [String] {
        var words = [String]()
        enumerateSubstrings(in: startIndex..., options: .byWords) { substring, _, _, _ in
            words.append(substring!)
        }
        return words
    }
}
代码语言:javascript
复制
"abc def".words()  //  ["abc", "def"]

注意,在Swift 4或更高版本中,您应该扩展StringProtocol,而不是String本身,以支持Substring。您可以在我发布的here的答案中检查如何实现它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55084091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档