2016-06-21 158 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()