基本上,Swift不允许我这样做 -
//类中不支持的类存储属性是指'静态'.
class var hello = "hello"
Run Code Online (Sandbox Code Playgroud)
不过这很好 -
static var hi = "hi"
Run Code Online (Sandbox Code Playgroud)
我知道Swift中Class和Static之间的区别在于Class变量不能存储存储的属性,而Static变量可以.但是,Class和Static变量之间的根本区别在于,静态变量不能在子类中重写,而类变量可以.这是我希望保留的功能.
我知道对这个问题的一个简单的解决方法是使用像这样的hacky修复程序将其作为计算属性 -
class var Greeting : String {
return "Greeting"
}
Run Code Online (Sandbox Code Playgroud)
这确实解决了这个问题,我希望它也可以帮助一些人在线.但是,我想知道是否有人知道Swift为什么会这样,并且不允许在类级变量中存储属性.
Luc*_*tti 10
class和static您班级的成员有什么区别?在这两种情况下,成员都属于Class类型本身(而不是实例),但有一个微小的区别:类成员可以被子类覆盖。
答案是:
是的, amethod当然可以被覆盖,所以你可以用class修饰符标记它
class Animal {
class func name() -> String {
return "Animal"
}
}
class Dog: Animal {
override class func name() -> String {
return "Dog"
}
}
Animal.name() // Animal
Dog.name() // Dog
Run Code Online (Sandbox Code Playgroud)
计算属性是一种特殊的方法。事实上,它基本上是一个接受 0 个参数并返回一个值的方法的语法糖。
class Animal {
class var name: String { return "Animal" }
}
class Dog: Animal {
override class var name: String { return "Dog" }
}
Animal.name // Animal
Dog.name // Dog
Run Code Online (Sandbox Code Playgroud)
这就是您只能将class修饰符添加到方法和计算属性的原因。
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |