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()
}
}
Пожалуйста, скажите мне, что я сделал неправильно и какой код будет правильным.
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()
}