我有2个功能写在斯威夫特2,但苹果迫使我迁移到斯威夫特4,我不能修复的功能。
extension String {
func stringsMatchingRegularExpression(expression: String) -> [String] {
if let range = self.rangeOfString(expression, options: NSString.CompareOptions.RegularExpressionSearch, range: nil, locale: nil) {
return [self[range]] + self[range.endIndex..<self.endIndex].stringsMatchingRegularExpression(expression)
}
return []
}
func stringsMatchingRegularExpressionLarge(expression: String) -> [String] {
var result = [String]()
var currentRange = self.characters.indices
while let range = self.rangeOfString(expression, options: NSString.CompareOptions.RegularExpressionSearch, range: currentRange, locale: nil) {
result.append(self[range])
currentRange.startIndex = range.endIndex
}
return result
}
}
第一个函数的返回是我无法修复的问题,第三行是Swift 4中的if let range = self.range(of: expression, options: NSString.CompareOptions.regularExpression, range: nil, locale: nil){
在第二个函数中,我不知道如何。字符迁移。
1条答案
按热度按时间kmynzznz1#
.characters
都没有了。您可以直接使用字符串本身。将
self.characters.indices
更改为self.indices
将
self.rangeOfString(expression, options: NSString.CompareOptions.RegularExpressionSearch, range: nil, locale: nil)
更改为self.range(of: expression, options: .regularExpression, range: nil, locale: nil)
最后,你可以使用
NSRegularExpression
来代替递归调用函数,但是要注意它可能会产生throw
错误,所以你应该用某种方法来处理它。使用下面的扩展:-更快的风格: