【问题标题】:Return from initializer without initializing all stored properties Error in a Regex class从初始化程序返回而不初始化所有存储的属性 Regex 类中的错误
【发布时间】:2017-01-07 16:48:21
【问题描述】:

我收到一条错误消息,上面写着“从初始化程序返回而不初始化所有存储的属性”

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
}

}

【问题讨论】:

    标签: regex swift swift2 initialization nsregularexpression


    【解决方案1】:

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

    你也可以将初始化器设为throwing 并转发错误:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 2020-07-09
      • 2017-12-31
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多