ios - Swift 从父类(super class)函数中相应的子类调用类函数

标签 ios swift nscoding

我想实现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/

相关文章:

ios - 裁剪和调整从图库或相机中选择的图像

ios - 动画图像到 UIImageView

ios - 用于 Tinder 风格滑动屏幕的 Swift iOS 动画

swift - View 不会被复制

ios - NSKeyedUnarchiver 无法处理在不同应用程序中创建的文件

objective-c - Vimeo 视频无法在 iPad UIWebView 上播放

html - iOS:在 HTML NSString 中查找特定段落的结尾

ios - 如何从应用程序返回到今天的扩展

ios - 使用 IBDesignable 模糊 ImageView

ios - 为什么在 UITableViewController 中使用 NSCoding 会出错?