Dam*_*ito 5 static overriding var swift
因式分解我的代码,我想设置从儿童类,我会在父类的类FUNC得到stringKey:
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"
}
Run Code Online (Sandbox Code Playgroud)
当然,我有预编译的错误消息
属性不会覆盖其超类中的任何属性
有没有解决方案,或者我需要传递密钥作为参数?像这样:
Chair.request(key : "jsonchairs" );
Table.request(key : "tables" );
Run Code Online (Sandbox Code Playgroud)
刚遇到同样的问题.使用计算属性 - 可以覆盖这些属性.
基类:
class BaseLanguage {
class var language: String {
return "Base"
}
static func getLocalized(key: String) -> String {
print("language: \(language)");
}
}
Run Code Online (Sandbox Code Playgroud)
儿童班:
class German: BaseLanguage {
override class var language: String {
return "de"
}
}
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因无法使用计算属性,则始终可以将变量属性包装在私有单例中.该类将外部接口公开为静态,但在其内部具有对其实例的静态私有引用.您可以在init方法中更改任何属性的值(只要它是变量).
您可以为此使用协议。只需使它们都符合 RequestKeyProtocol 示例,然后在每种情况下实现它即可。
protocol RequestKeyProtocol {
var requestKey: String
}
class myClass: RequestKeyProtocol {
var requestKey = "myKey"
}
Run Code Online (Sandbox Code Playgroud)
如果您需要默认值,请查看协议扩展。还可以观看今年有关协议的 WWDC 视频。
| 归档时间: |
|
| 查看次数: |
5383 次 |
| 最近记录: |