繁体   English   中英

Swift-初始化属于类的类变量

[英]Swift - Initializing class variables which are classes

我是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”,如何初始化它? 那真的是我想做的。

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

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

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

同时使用Position更改您的课程position_
而不是使用_尝试用capitalize每个单词的第一个字符(例如PositionMarker来写类名。
希望这会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM