" stringsMatchingRegularExpression"在Swift 2中已弃用,我应该使用什么呢?

时间:2015-09-07 13:24:52

标签: regex swift2

这是旧函数,它不适用于Xcode 7 Beta 5:

func onlyDoubleUse(textField: AnyObject){
    let field = textField.object! as! UITextField
    let subStringArray: [String]?
    do {
        subStringArray = try field.text!.stringsMatchingRegularExpression(expression: "[0-9]{1,}.[0-9]{1,}|[0-9]{1,}")
    } catch _ {
        subStringArray = nil
    }
    if(subStringArray?[0] != nil){
        field.text = subStringArray![0]
    }else{
        field.text = ""
    }
}

Apple在Swift 2中删除了stringsMatchingRegularExpression

如何解决?

1 个答案:

答案 0 :(得分:0)

这是一个递归方法,通过扩展名添加到String

extension String {
    func stringsMatchingRegularExpression(expression: String) -> [String] {
        if let range = self.rangeOfString(expression, options: NSStringCompareOptions.RegularExpressionSearch, range: nil, locale: nil) {
            return [self[range]] + self[range.endIndex..<self.endIndex].stringsMatchingRegularExpression(expression)
        }
        return []
    }

    // if you have a large string you should use this method
    func stringsMatchingRegularExpressionLarge(expression: String) -> [String] {
        var result = [String]()

        var currentRange = self.startIndex..<self.endIndex
        // use this line in Swift 2.x instead
        var currentRange = self.characters.indices

        while let range = self.rangeOfString(expression, options: NSStringCompareOptions.RegularExpressionSearch, range: currentRange, locale: nil) {

            result.append(self[range])
            currentRange.startIndex = range.endIndex
        }
        return result
    }
}