我可以在Swift中将我的类的子类作为属性吗?

时间:2016-01-22 20:56:40

标签: swift

Swift 2.1 中,在使用class方法之前,我需要initialize每个属性。但是如果我想拥有一个属性的子类,我将有一个无限循环。这可能吗?

class Myclass {
    let mySubClass:SubClass
    init() {
        mySubClass = SubClass()
        print("Init my class")
    }
}

class SubClass:Myclass {
    override init() {
        print("Init subclass")
    }
}

let myClass = Myclass()

2 个答案:

答案 0 :(得分:3)

您可以使用惰性存储属性。

在第一次使用子类的实例时,子类的实例不会被初始化。

class Myclass {
  lazy var mySubClass : SubClass = {
    return SubClass()
  }()

  init() {
    print("Init my class")
  }
}

class SubClass:Myclass {
  override init() {
    print("Init subclass")
  }
}

let myClass = Myclass()
myClass.mySubClass

答案 1 :(得分:1)

我认为你最好明确表达关系。类似的东西:

class Myclass {
    var mySubClass:SubClass?
    init() {
        print("Init my class")
    }
}

class SubClass:Myclass {
    override init() {
        print("Init subclass")
    }
}

var myClass = Myclass()
let mySub = SubClass()
myClass.mySubClass = mySub