Ответ 1
В документации говорится:
"статический" методы и свойства теперь разрешены в классах (в качестве псевдонима для "классный выпуск" ).
Так что это final
, что означает, что вы не можете его переопределить.
в отличие от class
var, где они могут быть переопределены в подклассах, я считаю, что это относится и к static
, но, к сожалению, нет. Вот пример
public class A {
private static let NAME: String = "A"
}
public class B: A {
private static let NAME: String = "B" //error
}
по-моему, static означает связь с этим конкретным классом, поэтому в приведенном выше примере B
должно получить собственное пространство для переопределения этой переменной, поскольку оно связано только с B
, я возвращаюсь к stored properties
, если только кто-то имеет лучшее решение.
В документации говорится:
"статический" методы и свойства теперь разрешены в классах (в качестве псевдонима для "классный выпуск" ).
Так что это final
, что означает, что вы не можете его переопределить.
Вы можете использовать вычисленные свойства:
class A {
class var Name: String {
return "A"
}
}
class B: A {
override class var Name: String {
return "B"
}
}
Использование:
print(A.Name) // "A"
print(B.Name) // "B"
Как и было предложено, вы не можете переопределять статические переменные, но можете использовать функцию класса (static) для переопределения.
class A {
class func StaticValue() -> AnyObject {
return "I am a String"
}
}
class B: A {
override class func StaticValue() -> AnyObject {
return 2
}
}
У вас могут быть свойства вычисляемые:
public class A {
class var NAME: String {
return "A"
}
}
public class B {
class var NAME: String {
return "B"
}
}
Если нужно, вы можете даже "разветкить" сохраненное свойство в подклассе:
public class A {
// Needs to be overriden in subclass
class var NAME: String {
return "A"
}
}
public class B {
class var NAME: String {
return B.storedName
}
static var storedName: String = defineName()
func defineName() -> String {
// You could do something more complex here
return "B"
}
}