我有一个协议A,它有一个静态变量x。 B是A的实现。在C类中,我传递B的实例并将其分配给a。如何从中访问2(B类中的x值)?
protocol A {
static var x : Int { get }
}
class B : A {
static var x: Int {
return 2
}
}
class C {
// instance of B is assigned to a.
let a: A
print(a.x)
}
答案 0 :(得分:3)
static
变量属于该类,而不属于实例。您可以致电dynamicType
:
print(a.dynamicType.x)
答案 1 :(得分:1)
在class C
中,a是一个属性,其中包含一个符合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
答案 2 :(得分:0)
自从发布此答案以来,情况发生了一些变化
(*q)[0]