2016-08-05 44 views
0

Ich sah ein Video von jemandem, der Protokoll in Swift orientierte und ich wurde damit aufgenommen. Die Person tat so etwas und schien keine Fehler zu bekommen.Initialize-Protokoll in einer Klasse

Ich bekomme die Fehlerklasse 'RandomViewController' hat keine Initialisierer. Wo bin ich weg? Könnte mich jemand korrigieren und in die richtige Richtung weisen?

EDIT: Das Video ist https://youtu.be/-g53kYDIpP4?t=611 EDIT2: Hat nicht durch das Video zu hören.

Antwort

1

Das liegt daran, dass Sie die Konstante deklarieren, die nicht optional ist, und initialisieren Sie sie nicht.

Sie sollten es mit Var deklarieren und es optional machen oder Initialisierer in RandomViewController schreiben und Ihre Konstante dort initiieren.

UPDATE

Beispiel

protocol Engine { 
    mutating func setSpeed(speed: Double) 
} 

struct Car: Engine { 
    var speed: Double = 0 

    mutating func setSpeed(speed: Double) { 
     self.speed = speed 
    } 
} 

class ViewController: UIViewController { 
    let engine:Engine 

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
     engine = Car(speed: 5); 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     engine = Car(speed: 5); 
     super.init(coder: aDecoder) 
    } 
} 
+0

init (engine: Engine) {self.engine = Engine} zwingt mich, eine init vom viewcontroller zu implementieren. – bCM

+0

Wie auch immer, scheint keine gute Lösung zu sein. Ich könnte falsch liegen. – bCM

+0

Dies ist ein strenger Typ Swift, wenn Sie deklarieren, dass es keine optionale Konstante ist, dann müssen Sie es in init oder rechts initialisieren, wo Sie es deklarieren – Konstantin

0

ändern es wie folgt und es initialisieren, bevor Sie es verwenden:

var engine: Engine! 
0

Das Problem war, ich Variablen in meinem struct auf globaler hatte Maßstab, der das Problem verursacht. Immer wenn ich versuchte, das Protokoll als einen Typ zu verwenden, klagte es darüber, dass es initialisiert werden muss.

Ich musste das Protokoll auflösen und strukturieren und es auf eine andere Weise zusammenbauen, die mein Problem löste.