Si le motif est invalide alors NSRegularExpression(pattern: pattern, ...)
échoue et génère une erreur, de sorte que self.internalExpression
n'est pas initialisé. Vous ne pouvez pas créer un objet sans initialiser toutes ses propriétés .
Vous devez donc décider comment gérer cette situation. Une option serait est de faire le initialiseur failable:
init?(_ pattern: String) {
self.pattern = pattern
do {
self.internalExpression = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
} catch let error as NSError {
print(error.localizedDescription)
return nil
}
}
Ensuite, l'appelant doit vérifier si l'initialisation a réussi:
if let regex = Regex("...") {
// ...
} else {
print("could not create Regex")
}
Vous pouvez également faire le initialiseur throw
ment et en avant la erreur:
init(_ pattern: String) throws {
self.pattern = pattern
self.internalExpression = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
}
Puis l'appelant doit attraper l'erreur:
do {
let regex = try Regex("...")
// ...
} catch let error as NSError {
print("could not create regex:", error.localizedDescription)
}
Enfin, si un motif non valide est considéré comme une erreur de programmation dans votre programme, puis abandonner l'exécution pour un motif non valable:
init(_ pattern: String) {
self.pattern = pattern
do {
self.internalExpression = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
} catch let error as NSError {
fatalError("could not create regex: " + error.localizedDescription)
}
}