在swift中调用超级指定初始化程序之前初始化属性值的目的是什么
这是我的代码:
class Base { init(){ print("Super!") } } class Test : Base { internal var y:Int convenience init(_ a:Int) { self.init() print("(a)") } override init() { super.init() //Error!!! Property 'self.y' not initialized at super.init call y = 123 } } 我认为应该编译: y在类’Base’中是不可见的,y和超类的初始化顺序是否真的无关紧要. 解决方法
你的论点
这是不正确的,这是不安全的. 超类init可以调用实例 一个简单的例子: class Base { init(){ print("enter Base.init") setup() print("leave Base.init") } func setup() { print("Base.setup called") } } class Test : Base { internal var y:Int override init() { y = 123 print("before super.init") super.init() print("after super.init") } override func setup() { print("Test.setup called") print("y = (y)") } } 输出: before super.init enter Base.init Test.setup called y = 123 leave Base.init after super.init 如您所见,访问子类的y属性 比较Objective-C中的情况可能会很有趣 所以这是Swift已经解决的问题之一(以更严格的要求为代价). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |