Swift 2.2: тип "()" не соответствует протоколу "BooleanType"

Я преобразовал метод Objective-C в Swift. И затем, в коде Swift, я получаю эту ошибку. Я не связал то, что я сделал неправильно.

Код Objective-C

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if ((self = [super initWithCoder:aDecoder])) {
        [self loadChecklistItems];
    }
    return self;
}

Код Swift 2.2

convenience required init(coder aDecoder: NSCoder) {
    if (self.init(coder: aDecoder)) {  // ERROR Here
        self.loadChecklistItems()
    }
}

Вот скриншот кода Swift

Пожалуйста, скажите мне, что я сделал неправильно и какой код будет правильным.

2 ответа

Решение

Просто позвоните инициализатору напрямую:

convenience required init(coder aDecoder: NSCoder) {
    self.init(coder: aDecoder)
    self.loadChecklistItems()
}

Однако обратите внимание, что ваш код выполняет бесконечный цикл вызовов. Вы уверены, что не хотите звонить super.init(...)? Кроме того, я думаю, что это не удобный инициализатор:

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.loadChecklistItems()
}

Этот инициализатор неисправен, то есть он может вернуть ноль. Синтаксис неисправного инициализатора в Swift:

convenience required init?(coder aDecoder: NSCoder) {  // Note the question mark after init

Кроме того, если вы вызываете этот инициализатор из себя, ваш код будет бесконечно зацикливаться. Я думаю, что вы хотите сделать:

convenience required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)  // call super.init, not self.init
    self.loadChecklistItems()
}
Другие вопросы по тегам