ios - Swift - 初始化类变量

标签 ios swift

我是 Swift 的新手。我在声明类(class)时遇到问题。我有以下 -

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”,我该如何初始化它?这正是我想要做的。

最佳答案

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

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

    class Position {  
        var x: Float = 0   
        var y: Float = 20  
    }
    
    let position = Position() // nice!
    
  3. Position 类是一个非常简单的数据构造 - 感觉 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()
    

关于ios - Swift - 初始化类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37935737/

相关文章:

ios - 如何防止 UIButton "clipsToBounds"剪切标签?

ios - 关闭 View 时更改值

ios - 无法将类型 'Swift.Optional<Swift.AnyObject>' (0x7f9d44715db0) 的值转换为 'NSArray' (0x60000004f4f8)

ios - 注册自定义单元格时未调用 prepareForSegue

ios - 我怎样才能通过加速获得速度?

android - iOS 相当于 Android 的均衡器类

iOS Core Plot with Swift - 格式化 Axis

swift - 是否可以在独立脚本中使用 Vapor 3 Postgres Fluent?

swift - If 语句导致返回的元组为 'Use of Unresolved Identifier'

ios - MKUserTrackingBarButtonItem 色调 IOS7 不起作用,但在 IOS 6 上起作用