Swift - 初始化类变量

时间:2016-06-21 04:42:49

标签: ios swift

我是Swift的新手。我在宣布课程时遇到了麻烦。我有以下内容 -

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

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

现在我可以在initializer init()课程中创建position_,就像这样 -

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

我是否可以在node_ class中使用此初始值设定项?因为没有init()函数,就无法初始化node_ class中的坐标变量。或者有吗?
我发现很难相信Swift会要求我在position_中再次初始化每个node_ class变量。换句话说,是否有比下面更好的选择?

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

此外,如果我想创建另一个变量,请说" b" UIButton类型如何初始化?这就是我想要做的。

2 个答案:

答案 0 :(得分:1)

  1. 您不必再次初始化每个变量,因为每次创建类,结构或枚举的新实例时,它们的存储属性都具有初始值。

  2. 始终尝试提供默认值,而不是在初始值设定项中设置值。如果类或结构为其所有属性提供默认值,Swift会自动为您提供默认初始值设定项。

    class Position {  
        var x: Float = 0   
        var y: Float = 20  
    }
    
    let position = Position() // nice!
    
  3. 位置类是一个非常简单的数据结构 - 感觉结构类型在这里更合适。

  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()
    

答案 1 :(得分:0)

首先每个class名称以capitalize字符开头。所以像这样改变你的node_类

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

同时使用position_更改您的班级Position
而不是使用_尝试在capitalize每个单词的第一个字符中编写类名,如PositionMarker
希望这会对你有所帮助。