2017-03-03 128 views
-1

我有有一個結構作爲一個屬性的協議:結構內部協議

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

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

現在我有一個類是SKShapeNode一個子類:

class Shapes: SKShapeNode, ShapeType { 
    var dimensions: Dimensions 

    override init {  // Error 
     super.init() 

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

我得到這個錯誤:

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

什麼是inisialzie類內結構的正確方法?

+1

在代碼中這麼多的問題來初始化self.dimensions。協議s/b協議。 init之後需要parens。你真的有代碼可以得到你引用的錯誤信息嗎?嘗試張貼。 –

+0

在出現錯誤的代碼中有註釋。你能否澄清我在代碼中遇到的問題? – Abdou023

+0

@ Abdou023他很清楚。 'Protocol'不正確,因爲它與'protocol'不同。在'Shapes'中,'override'後缺少'()'。您還需要以不完整的方式繼承「SKShapeNode」,因爲您必須實現其'必需的init(coder:)'。請發佈實際構建的代碼,或者學習如何解決代碼中的其他問題(如果您不知道爲什麼它們是錯誤的),因爲就其本身而言,我們需要解決代碼中存在的幾個問題與您的原始問題有關。 –

回答

2

您必須調用super.init()方法之前,你的形狀類初始化

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

您正在將屬性(self.dimensions)分配給類型(維度),而不是實例。 – nbloqs

+0

固定。感謝您的高舉 – hooliooo