关于在Swift中覆盖类属性的困惑

时间:2016-02-27 04:39:55

标签: swift inheritance properties static

我已经阅读了Swift文档并在这里进行了搜索,但我仍然不确定如何实现一个类层次结构,其中每个子类为继承的静态属性设置自定义值;那就是:

  1. 基类定义静态属性:所有实例共享相同的值。
  2. 子类重写静态属性:所有实例共享相同的值,它与基类的值不同。
  3. 可以存储财产吗?

    另外,我应该如何从实例方法中访问属性的值(不管特定的类),并且每次都获得正确的值?以下代码是否有效?

    class BaseClass 
    {
        // To be overridden by subclasses:
        static var myStaticProperty = "Hello"
    
        func useTheStaticProperty()
        {
            // Should yield the value of the overridden property
            // when executed on instances of a subclass: 
            let propertyValue = self.dynamicType.myStaticProperty
    
            // (do something with the value)
        }  
    

1 个答案:

答案 0 :(得分:15)

你非常接近于那里,除了你不能覆盖子类中的static属性 - 这就是static的含义。因此,您必须使用class属性,这意味着它必须是计算属性 - Swift缺少存储的class属性。

所以:

class ClassA {
    class var thing : String {return "A"}
    func doYourThing() {
        print(type(of:self).thing)
    }
}
class ClassB : ClassA {
    override class var thing : String {return "B"}
}

让我们测试一下:

ClassA().doYourThing() // A
ClassB().doYourThing() // B