"self" используется внутри блока "catch", доступного из вызова super.init

Этот код не компилируется в 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 ответ

Решение

Объект не полностью инициализирован, если super.init терпит неудачу, в этом случае ваш инициализатор должен также потерпеть неудачу.

Самое простое решение было бы сделать это throwING:

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
        }
        // ...
    }
}
Другие вопросы по тегам