覆盖子类swift 1.2中的静态变量

29 swift

classvar 不同,他们可以在子类中重写,我相信同样适用static但不幸的是.这是一个例子

public class A {
    private static let NAME: String = "A"
}

public class B: A {
    private static let NAME: String = "B" //error
}
Run Code Online (Sandbox Code Playgroud)

在我看来,静态意味着与该特定类的关联,所以在上面的例子中B应该得到它自己的空间来重新定义该变量,因为它只与它相关联B,我正在恢复,stored properties除非有人有更好的解决方案.

Dán*_*agy 27

文件说:

现在允许在类中使用"静态"方法和属性(作为"类final"的别名).

所以它就是final,这意味着你无法覆盖它.


gdu*_*dub 24

您可以使用计算属性:

class A {
   class var Name: String {
       return "A"
   }
}

class B: A {
   override class var Name: String {
       return "B"
   }
}
Run Code Online (Sandbox Code Playgroud)

用法:

print(A.Name) // "A"
print(B.Name) // "B"
Run Code Online (Sandbox Code Playgroud)


Niv*_*ash 17

如建议的那样,您不能覆盖静态变量,但可以使用类(静态)函数来覆盖.

class A {
   class func StaticValue() -> AnyObject {
      return "I am a String"
   }
}

class B: A {
    override class func StaticValue() -> AnyObject {
        return 2
    }
}
Run Code Online (Sandbox Code Playgroud)