'自'用于内部' catch'阻止从super.init调用到达

时间:2018-04-26 14:37:00

标签: swift try-catch nsregularexpression throws

此代码未在Swift 3.3上编译。它会显示以下消息: ' self'用于内部' catch'阻止从super.init调用

public class MyRegex : NSRegularExpression {

    public init(pattern: String) {
        do {
            try super.init(pattern: pattern)
        } catch {
            print("error parsing pattern")
        }
    }

}

那可能是什么?

1 个答案:

答案 0 :(得分:9)

如果super.init失败,则对象未完全初始化,在这种情况下,初始化程序也必须失败。

最简单的解决方案是throw ing:

public class MyRegex : NSRegularExpression {

    public init(pattern: String) throws {
        try super.init(pattern: pattern)
        // ...
    }

}

或作为可用的初始化程序:

public class MyRegex : NSRegularExpression {

    public init?(pattern: String)  {
        do {
            try super.init(pattern: pattern)
        } catch {
            print("error parsing pattern:", error.localizedDescription)
            return nil
        }
        // ...
    }
}