我试图将这个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:',预期的'_:in:')
我遵循"Fix“提示符,它将行更改为:
let range = Range<String.Index>(self.startIndex, in: self.endIndex)
然后,我在没有修正建议的情况下得到了这个错误:
不能将'String.Index‘类型的值转换为预期的参数类型'NSRange’(又名'_NSRange')
这些错误可能是由于Swift版本更新造成的,我无法找到正确的方法来编写这一行。
发布于 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
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。您可以在我发布的here的答案中检查如何实现它
https://stackoverflow.com/questions/55084091
复制相似问题