此代码未在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")
}
}
}
那可能是什么?
答案 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
}
// ...
}
}