我想实现init(coder aDecoder: NSCoder!)
在父类(super class)中,并通过在运行时调用父类(super class)中特定子类的类方法来在所有子类中使用它。
我的 super 类
class func dummyDict() -> NSDictionary
init(coder aDecoder: NSCoder!) {
for(key,value) in self.class.dummyDict(){
--------------------
^
|
|
Get this from the corresponding subclass at runtime!
NSLog("encoding \(value) for key \(key)")
}
}
是否有可能来自 MySuperClass
的子类访问类函数dummyDict()
在运行时?
最佳答案
我想我明白你的意思了。您创建一个 Base
类,实现一个初始值设定项和一个类(静态)函数:
class Base {
class func dummyDict() -> Dictionary<String, String> {
return ["base1": "val1"]
}
init() {
for (key, value) in self.dynamicType.dummyDict() {
println("encoding \(value) for key \(key)")
}
}
}
接下来,您要创建子类,并让初始化程序调用 dummyDict
方法的重写版本。您只需重写该方法即可:
class Subclass1 : Base {
override class func dummyDict() -> Dictionary<String, String> {
return ["subclass1": "sub1"]
}
}
现在,当您创建 Subclass1
的实例时,打印的内容是:
encoding sub1 for key subclass1
这是预期的输出。
请注意,初始化程序中的 for
循环使用的是 self.dynamicType.dummyDict()
而不是 Base.dummyDict()
。后者总是调用 Base
类中定义的类方法,而前者在从 Base
继承的实际类的范围内调用它
关于ios - Swift 从父类(super class)函数中相应的子类调用类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42844722/