2016-05-05 2 views
1

Je créais une expression régulière mais NE PEUT PAS résoudre ce problèmeerreur NSRegularExpression, je ne peux pas utiliser les expressions régulières

class Regex { 
    let internalExpression: NSRegularExpression 
    let pattern: String 

    init(_ pattern: String) { 
     self.pattern = pattern 
     var error: NSError? 
     self.internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error) 
    } 

    func test(input: String) -> Bool { 
     let matches = self.internalExpression.matchesInString(input, options: nil, range:NSMakeRange(0, countElements(input))) 
     return matches.count > 0 
    } 
} 

Voici les erreurs que j'ai obtenu:

"Cannot invoke initializer for type 'NSRegularExpression' with an argument list of type '(pattern: String, options: _, error: inout NSError?)'"

et

"Use of unresolved identifier 'countElements'"

Je veux seulement utiliser:

if usuarioView.text! =~ "/^[a-zA-Z0-9_]{3,30}$/" 

Répondre

0

Il y a quelques problèmes avec votre code. Il semble que vous migriez d'une version antérieure de Swift vers Swift 2.x.

Le NSRegularExpression initialiseur a changé de jeter son erreur au lieu de passer dans un ErrorPointer:

do { 
    self.internalExpression = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive) 
} catch { 
    print(error) 
} 

Pour spécifique nil pour une valeur OptionType, utilisez []. Pour obtenir la longueur d'une chaîne, utilisez input.characters.count, car countElements a été supprimé de Swift:

let matches = self.internalExpression.matchesInString(input, options: [], range:NSMakeRange(0, input.characters.count))