【发布时间】:2016-12-13 07:23:54
【问题描述】:
例如,这是一个超类:
class A {
public init(a: String = "aaaa") {
// this class is in a framework, and the subclass use that framework.
......
}
}
有没有办法编写一个子类并用参数a的相同默认值覆盖init?
超类在框架内。一个项目使用这个框架,想用默认参数值覆盖一个函数,但是在覆盖函数中似乎没有办法获取超类的默认参数值。我可以在子类中编写另一个函数,例如检查参数是否为 nil,然后使用其默认值调用超类,否则,将子类参数值传递给超类。但是我想找到一种方法来编写完全相同的函数名,即覆盖超类函数。
【问题讨论】:
-
本来要编辑我的评论,却误删了……不管怎样,有没有办法在运行时捕获超类的默认参数值?例如。如果您知道上面初始化程序中的
a被分配给某个类属性(例如,aa)。在这种情况下,您可以将a的默认值捕获为类的某个静态属性(对于此示例,static let defaultValue = A().aa,假设aa是可访问的),并使用此属性作为默认值上面初始化器的override(例如override init(a: String = Foo.defaultValue) { ... })。
标签: swift function inheritance overriding default-value