swift - 在子类 Swift 中覆盖静态变量

标签 swift static overriding var

为了分解我的代码,我想从子类中设置一个 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/

相关文章:

ios - Swift 设置子类 UIButton ButtonType

ios - 正在更新的单元格多于表中存在的单元格数?

c++ - 如何定义线程局部静态变量?

c# - 静态类库的替代品

c++ - Google模拟和替代关键字

ios - UIGraphicsBeginPDFContextToData 在创建 pdf 后不显示图像

ios - 有没有办法在 Swift 或 ObjC 中查询自定义 DNS 服务器的 DNS 请求

c#:静态方法中的静态变量

c# - 在 C# 7.0 中使用元组和字段名称规则覆盖方法

java - Android onBackPressed() 没有被调用?