2017-03-03 7 views
-1

ich ein Protokoll haben, die eine Struktur als Eigenschaft hat:Struct innerhalb Protokoll

struct Dimensions { 
    var width: CGFloat 
    var height: CGFloat 
} 

Protocol ShapeType { 
    var dimensions: Dimensions {get set} 
} 

Jetzt habe ich eine Klasse, die eine Unterklasse von SKShapeNode ist:

class Shapes: SKShapeNode, ShapeType { 
    var dimensions: Dimensions 

    override init {  // Error 
     super.init() 

     dimensions = Dimensions(width: 40, height: 40) 
    } 
} 

ich diesen Fehler:

Property 'self.dimensions' not initialized at super.init call 

Was ist der richtige Weg, um die Struktur innerhalb der Klasse inisialzie?

+1

So viele Probleme in Ihrem Code. Protokoll s/b Protokoll. Brauchen Sie Parens nach Init. Haben Sie tatsächlich Code, der die Fehlermeldung, die Sie angeben, erhalten kann? Sende das bitte. –

+0

Es gibt einen Kommentar im Code, wo der Fehler auftritt. Würdest du mehr darüber klären, welche Art von Problemen ich in meinem Code habe? – Abdou023

+0

@ Abdou023 Er ​​war ziemlich klar. "Protokoll" ist falsch, da es sich nicht um "Protokoll" handelt. In 'Shapes' fehlt' '' 'nach' override init'. Sie untergliedern 'SKShapeNode' auch auf unvollständige Weise, da Sie das' init (coder:) 'implementieren müssen. Bitte schreiben Sie Code, der tatsächlich erstellt wird, oder lernen Sie, wie Sie die anderen Probleme in Ihrem Code beheben können, wenn Sie nicht wissen, warum sie falsch liegen, da wir jetzt einige Probleme in Ihrem Code beheben müssen, die das nicht sind im Zusammenhang mit Ihrer ursprünglichen Frage. –

Antwort

2

Sie haben self.dimensions zu initialisieren, bevor Sie die super.init() -Methode in Ihrer Shapes Klasseninitialisierer nennen

init(dimensions: Dimensions) { 
    self.dimensions = dimensions 
    super.init() 
} 
+0

Sie weisen einem Typ (Dimensions) eine Eigenschaft (self.dimensions) zu, nicht einer Instanz. – nbloqs

+0

Behoben. Danke für die Köpfe hoch – hooliooo

Verwandte Themen