2015-09-07 2 views
1

Это старая функция, которая не работает на Xcode 7 Beta 5:"stringsMatchingRegularExpression" устарел в Swift 2, что я должен использовать вместо этого?

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 удалила stringsMatchingRegularExpression в Swift 2.

Как это исправить?

ответ

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 
    } 
} 
+0

Я установил его на своем пути в настоящее время он работает, но я не могу использовать «» - dot for double 'let subStringArray = field.text! .stringsMatchingRegularExpression (" [0-9] {1,}. [0-9] {1,} | [0-9] {1,} ") if (subStringArray.count> 0) { если (subStringArray [0]! = "") { field.text = subStringArray [0] } еще { field.text = "" } } еще { поле. text = "" } ' –

+0

@BogdanBogdanov Я не знаю, что вы подразумеваете под« Я не могу использовать ».« - точка для двойника ». Но точка («.») В вашем regrex должна быть заменена на «\\». так как это нормальная строка «.». Другой будет соответствовать любому персонажу. Regrex: «[0-9] {1,} \\. [0-9] {1,} | [0-9] {1,}". Улучшенный regrex, который делает то же самое: «\\ d + (\\. \\ d +)?" – Qbyte

+0

Когда я запускаю это на iPad Air 2 Simulator и перехожу в это поле, я могу использовать только цифры 0-9, но я не могу набрать 36.6 «.». не может быть введено на поле. Я попытался с вашим регулярным выражением, результат тот же, что и не использовать точку ... –

Смежные вопросы