【发布时间】:2021-06-02 23:07:19
【问题描述】:
在父类初始化器中,我想使用已被子类覆盖的属性。
看这个例子:
import Foundation
class Parent
{
var string = "Parent"
init()
{
print(string) // prints "Parent", would like it to print "Child"
}
}
class Child: Parent
{
override init()
{
super.init()
string = "Child"
}
}
let child = Child()
defer { print(string) } 无济于事,因为它只是在子类发生任何更改之前将打印移动到父类初始化器之后。
Swift 为这个案例提供了哪些可能性?
【问题讨论】:
-
你修改
string之后调用super.init(),你期待什么?print(child.string)确实打印了正确的值。 -
不会的。在运行时,它将打印初始化值 - 父级。这不是初始化程序的目的。您能否在问题中添加您想要实现的目标?
-
@vadian 这正是问题所在。我想知道是否有一种语言功能允许我在所有子初始化完成后推迟一个要调用的语句。在我的示例中,它是在子初始化完成之前完成的。
-
@flanker 让我想想
标签: swift inheritance init deferred initializer