gpt4 book ai didi

regex - 从初始值设定项返回而不初始化正则表达式类中的所有存储属性错误

转载 作者:搜寻专家 更新时间:2023-11-01 06:18:25 24 4
gpt4 key购买 nike

我收到一条错误消息,内容为“未初始化所有存储的属性就从初始化程序返回”

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
}

最佳答案

如果模式无效则 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")
}

您还可以使初始化器抛出并转发错误:

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)
}
}

关于regex - 从初始值设定项返回而不初始化正则表达式类中的所有存储属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39243783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com