我收到这条错误消息,说明"从初始化程序返回而不初始化所有存储的属性"
class Regex {
let internalExpression: NSRegularExpression
let pattern: String
init(_ pattern: String) {
self.pattern = pattern
var error: NSError?
do {
self.internalExpression = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
} catch {
print(error)
}
}//Error Message Goes Here
func test(input: String) -> Bool {
let matches = self.internalExpression.matchesInString(input, options: [], range:NSMakeRange(0, input.characters.count))
return matches.count > 0
}
}
答案 0 :(得分:4)
如果模式无效,那么NSRegularExpression(pattern: pattern, ...)
失败并抛出错误,因此self.internalExpression
不是
初始化。如果不初始化所有对象,则无法创建对象
属性。
所以你必须决定如何处理这种情况。一种选择 是使初始化器可用:
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
}
}
然后调用者必须检查初始化是否成功:
if let regex = Regex("...") {
// ...
} else {
print("could not create Regex")
}
您还可以创建初始值设定项throw
并转发错误:
init(_ pattern: String) throws {
self.pattern = pattern
self.internalExpression = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive)
}
然后调用者必须捕获错误:
do {
let regex = try Regex("...")
// ...
} catch let error as NSError {
print("could not create regex:", error.localizedDescription)
}
最后,如果将无效模式视为编程错误 在你的程序中,然后中止执行无效模式:
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)
}
}