【发布时间】:2015-08-23 04:21:39
【问题描述】:
class Animal {
class func generate() -> Animal {
return self()
}
}
编译器抱怨使用元类型值构造类类型“Animal”的对象必须使用“必需”初始化程序
我可以理解这一点。如果我这样写一个子类:
class SubAnimal: Animal {
let head: Int
init(head: Int) {
self.head = head
super.init()
}
}
它将继承Animal的类方法generate(),但不会继承其默认初始化器init()。所以SmallAnimal.generate() 实际上调用了SmallAnimal(),但是SmallAnimal 没有初始化器init()!当然这是编译器想要阻止的。
让我困惑的是一个类似的问题。
class someClass {
}
let anotherClass = someClass.self
let anotherObject = anotherClass()
编译器仍然抱怨使用元类型值构造类类型“Animal”的对象必须使用“必需”初始化程序。
这一次,我无法理解。 anotherClass 是一个元类型值,但是会导致什么不好的结果呢?
我知道如何解决这个问题,添加required init() {} 是解决方案。但是我真的很想知道第二种情况的原因。
【问题讨论】:
标签: swift