Swift:为什么我不能从override init调用方法?
发布时间:2020-12-14 02:29:33 所属栏目:百科 来源:网络整理
导读:我有以下代码示例(来自PlayGround): class Serializable : NSObject{override init() { }}class Device : Serializable{ var uuid:String override init() { println("init ") self.uuid = "XXX" self.uuid = Device.createUUID() println(self.uuid) } cla
我有以下代码示例(来自PlayGround):
class Serializable : NSObject{ override init() { } } class Device : Serializable{ var uuid:String override init() { println("init ") self.uuid = "XXX" self.uuid = Device.createUUID() println(self.uuid) } class func createUUID() -> String{ return "XXX2" } } var device = Device() 您可以注意到我将createUUID方法实现为静态. 但是为什么我不能以静态的方式从init调用这个方法呢? : class Serializable : NSObject{ override init() { } } class Device : Serializable{ var uuid:String override init() { // tried // super.init() println("init ") self.uuid = "XXX" self.uuid = self.createUUID() // ERROR self.uuid = createUUID() // ERROR println(self.uuid) // tried // super.init() } func createUUID() -> String{ return "XXX2" } } var device = Device() 没有继承它可以正常工作: class Device { var uuid:String init() { println("init ") self.uuid = "XXX" self.uuid = self.createUUID() println(self.uuid) } func createUUID() -> String{ return "XXX2" } } var device = Device()
有两个竞争
initialization safety checks导致您的问题.
和
下面是它的工作原理. override init() { super.init() // Fails safety check 1: uuid is not initialized. uuid = createUUID() } 反过来, override init() { uuid = createUUID() // Fails safety check 4: cannot call an instance method before initialization is complete. super.init() } 感谢@Ruben in his answer (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |