为了分解我的代码,我想从子类中设置一个 stringKey,我将在父类的类 func 中获取它:
Chair.request();
Table.request();
class Furniture: NSObject {
static let requestKey : String!
class func request(){
print("class key => \(self.requestKey)")
...
}
}
class Chair: Furniture {
static let requestKey : String = "jsonchairs"
}
class Table: Furniture {
static let requestKey : String = "tables"
}
当然,我有预编译的错误信息
Property does not override any property from its superclass
是否有解决方案,或者我是否需要将 key 作为参数传递?像这样:
Chair.request(key : "jsonchairs" );
Table.request(key : "tables" );
最佳答案
刚遇到同样的问题。使用计算属性 - 这些可以被覆盖。
基类:
class BaseLanguage {
class var language: String {
return "Base"
}
static func getLocalized(key: String) -> String {
print("language: \(language)");
}
}
子类:
class German: BaseLanguage {
override class var language: String {
return "de"
}
}
如果由于某种原因你不能使用计算属性,你总是可以将变量属性包装在私有(private)单例中。该类将外部接口(interface)公开为静态,但在其内部具有对其实例的静态私有(private)引用。您可以在 init 方法中更改任何属性的值(只要它是变量)。
关于swift - 在子类 Swift 中覆盖静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33996864/