Swift call class function from corresponding subclass in superclass function
ios, nscoding, swift
Solution
I think I caught what you mean. You create a `Base` class, implementing an initializer and a class (static) function:
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)")
}
}
}
Next you want to create subclasses, and have the initializer to call an overridden version of the `dummyDict` method. You simply have to override that method:
class Subclass1 : Base {
override class func dummyDict() -> Dictionary<String, String> {
return ["subclass1": "sub1"]
}
}
Now, when you create an instance of `Subclass1`, what's printed is:
encoding sub1 for key subclass1
which is the expected output.
Note the `for` loop in the initializer is using `self.dynamicType.dummyDict()` rather than `Base.dummyDict()`. The latter always calls the class method defined in the `Base` class, whereas the former calls it in the scope of the actual class inherited from `Base`
Problem
I would like to implement `init(coder aDecoder: NSCoder!)` in a superclass, and use it in all subclasses by calling a class method on the particular subclass in the superclass at runtime. MySuperClass ``` 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)") } } ``` Is it possible that subclasses from `MySuperClass` access the class function `dummyDict()` at runtime ?