«self» используется внутри блока «catch», доступного из вызова super.init - PullRequest
0 голосов
/ 26 апреля 2018

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

Объект не полностью инициализируется при сбое 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
        }
        // ...
    }
}
...