2016-04-28 4 views
0

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

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() 
    } 
} 

Here is the screenshot of Swift code

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

+0

Возможные DUP из http://stackoverflow.com/questions/33990677/how-to-code-initwithcoder-in-swift – Sulthan

ответ

0

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

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() 
} 
0

Это инициализатор failable, то есть он может вернуть ноль. Синтаксис failable инициализаторе в 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() 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^