2016-04-28 20 views
0

Ich habe eine Objective-C-Methode in Swift konvertiert. Und dann, in den Swift Code, bekomme ich diesen Fehler. Ich habe nichts gebunden, was ich falsch gemacht habe.Swift 2.2: Typ '()' entspricht nicht Protokoll 'BooleanType'

Objective-C-Code

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

Swift 2.2 Code

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

Here is the screenshot of Swift code

Bitte sagen Sie mir, was ich falsch gemacht haben und was der richtige Code sein.

+0

Mögliche dup von http://stackoverflow.com/questions/33990677/how-to-code-initwithcoder-in-swift – Sulthan

Antwort

0

Rufen Sie einfach die initializer direkt:

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

Beachten Sie jedoch, dass der Code einen unendlichen Zyklus von Anrufen macht. Sind Sie sicher, dass Sie nicht super.init(...) anrufen möchten? Außerdem glaube ich, dass dies nicht ein Bequemlichkeit initializer:

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

Das initializer ist failable, dh es nil zurückgeben kann. Die Syntax für eine failable initializer in Swift ist:

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

Außerdem, wenn Sie aus sich heraus, dass initializer anrufen, wird der Code einer Endlosschleife. Ich denke du meinst zu tun:

convenience required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) // call super.init, not self.init 
    self.loadChecklistItems() 
} 
Verwandte Themen