在class C
一個是持有型秉承protocol A
實例的屬性。然而,一個靜態變量(也稱爲類變量)是不是從一個實例訪問,它是從類訪問,所以你會以下列方式訪問該值:
B.x
一個實例變量將是一個不同的問題,併爲這個代碼將是:
protocol A {
var x : Int { get }
}
class B : A {
var x: Int {
return 2
}
}
class C {
// instance of B is assigned to a.
let a: A
init() {
a = B()
}
}
C().a.x
這些可以愉快地使用相同的變量名並存:
protocol A {
static var x : Int { get }
var x : Int { get }
}
class B : A {
static var x: Int {
return 2
}
var x: Int {
return 2
}
}
class C {
// instance of B is assigned to a.
let a: A
init() {
a = B()
}
}
C().a.x
B.x
是否有將'x'作爲'static var'的特殊原因? – damirstuhec
在這種情況下,你不需要靜態。基本上,你的問題是,你試圖通過該類的一個實例訪問一個「靜態」(也就是類相關變量)。刪除「靜態」要求,你很好去。 – damirstuhec
它是靜態的,因爲在某些情況下,我需要做B.x,但在其他情況下,我不能這樣做,因爲A可以有多個實現。 – 2ank3th