2016-06-21 180 views
0

我是Swift的新手。我在宣佈課程時遇到麻煩。我有以下 -Swift - 初始化類變量

class position_ 
{ 
    var x: Float = 0 
    var y: Float = 0 
} 

class node_ 
{ 
    var label: String = nil 
    var coordinates: position_ 
} 

現在我可以在position_類創建initializer init(),這樣的 -

class position_ 
{ 
    var x: Float 
    var y: Float 
    init() 
    { 
     x = 0 
     y = 0 
    } 
} 

反正我有可以使用這個初始化的node_ class?因爲沒有init()函數,所以無法初始化node_ class中的座標變量。或者在那裏?
我很難相信Swift會要求我在node_ class中再次初始化每個position_變量。換句話說,有沒有比下面更好的選擇?

class node_ 
{ 
    var label: String 
    var coordinates: position_ 
    init() 
    { 
     name = nil 
     coordinates.x = 0 
     coordinates.y = 0 
    } 
} 

另外,如果我想創建另一個變量說UIButton類型的「B」我怎麼初始化?那真的是我想要做的。

回答

0

第一個每class姓名以capitalize開頭字符。因此,改變你的node_類這樣

class Node 
{ 
    var label: String 
    var coordinates: position_ 
    init() 
    { 
     name = "" 
     coordinates = position_() 
    } 
} 

也能改變你position_Position
而不是使用_嘗試寫capitalize類名稱的第一個字符,如PositionMarker
希望這會幫助你。

1
  1. 您不必再次初始化每個變量,因爲每次創建類,結構或枚舉的新實例時,它們的存儲屬性都具有初始值。

  2. 總是嘗試提供一個默認值,而不是在初始化程序中設置一個值。如果類或結構爲其所有屬性提供默認值,Swift會自動爲您提供默認初始值設定項。

    class Position { 
        var x: Float = 0 
        var y: Float = 20 
    } 
    
    let position = Position() // nice! 
    
  3. 位置類是一個非常簡單的數據構造 - 感覺就像Struct類型在這裏更合適。

  4. 最終代碼 - 用的UIButton

    struct Position { 
        var x: Float = 0 
        var y: Float = 20 
    } 
    
    class Node { 
        var label = "" // label is inferred to be of type String 
        var coordinates = Position() 
        var button = UIButton(type: .InfoDark) 
    } 
    
    let myNode = Node()