2016-05-06 3 views
2

Ich möchte, dass das Modell vom implementierenden Entwickler übergeben wird, und ich möchte, dass das verpflichtend ist.Swift: Wie man eine Let-Konstante in einer UIViewController-Unterklasse initialisiert

let model: PagingTutorialModel 

init(withModel model: PagingTutorialModel) { 
    self.model = model 
    super.init(nibName: nil, bundle: nil) 
} 

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

Fehler: Anwesen 'self.model' nicht super.init Aufruf initialisiert

+0

versuchen Sie es mit optionalem init 'let model: PagingTutorialModel?' –

+2

Nein. Bitte wechseln Sie nicht zu Optionals, um den Compiler zu beschwichtigen, es sei denn, ein optionales ist tatsächlich die korrekte Darstellung Ihrer Daten. – nhgrif

+1

[Empfohlener Wert für Init mit Coder] (http://stackoverflow.com/a/32108404/2792531). – nhgrif

Antwort

0

Der Grund dafür ist, dass in init?(coder:) Sie auch das Modell einstellen müssen. Abhängig von Ihnen Setup könnte eine Lösung zu stoppen sein in init?(coder:):

required init?(coder aDecoder: NSCoder) { 
    fatalError("Not implemented") 
} 

Aber diese Weise können Sie diese Ansicht-Controller aus dem Storyboard nicht initialisiert werden. Aber meiner Meinung nach Storyboards sind nur für das Prototyping.

3

View-Controller können keine let-Werte annehmen, es sei denn, Sie weisen ihnen einen Standardwert zu.

let foo = 3 

Das Problem ist, wenn wir View-Controller von Storyboards zu initialisieren, initialisiert iOS die View-Controller mit init(coder:). Wir haben keine Möglichkeit, während der Initialisierung Werte zu übergeben, daher können wir keine let Eigenschaften haben.

Verwandte Themen