NSStringEnumerationOptions.ByWords 出错 - Swift 4.2
Getting Error with 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:',应为 '_:in:')
我按照 "Fix" 提示进行操作,并将行更改为:
let range = Range<String.Index>(self.startIndex, in: self.endIndex)
然后,我收到此错误,没有修复建议:
无法将类型 'String.Index' 的值转换为预期的参数类型 'NSRange'(又名“_NSRange”)
错误可能是由于 Swift
版本更新造成的,我想不出写这行的正确方法。
自 Swift3:
以来,范围方法语法中的枚举子字符串发生了一些变化
新声明:
func enumerateSubstrings(in range: R, options opts:
String.EnumerationOptions = default, _ body: @escaping (String?,
Range, Range, inout Bool) -> Void) where 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
。您可以在我发布的答案中查看如何实现它
我正在尝试将此 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
版本更新造成的,我想不出写这行的正确方法。
自 Swift3:
以来,范围方法语法中的枚举子字符串发生了一些变化新声明:
func enumerateSubstrings(in range: R, options opts: String.EnumerationOptions = default, _ body: @escaping (String?, Range, Range, inout Bool) -> Void) where 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
。您可以在我发布的答案中查看如何实现它