以下是在实例方法中直接使用静态成员:
public struct RankSet {
private let rankSet : UInt8
static let counts : [UInt8] = [
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
... // More of the same
4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
]
public var count : Int {
get {
// The error is on the following line
return Int(counts[Int(rankSet)])
}
}
}
Swift产生以下错误:
静态成员
类型的实例'counts'
不能用于'RankSet'
由于静态成员在我的类的所有实例之间共享,因此所有实例成员(包括count
)都应该可以访问counts
成员。这是怎么回事?
答案 0 :(得分:26)
错误消息具有误导性:可以从任何具有适当可见性的代码访问静态成员,包括实例方法。
但是,Swift没有提供从实例方法访问静态成员的简短名称 - 这是许多其他编程语言的常见功能。这就是造成上述错误的原因。
Swift坚持完全限定静态成员的名称,如下所示:
public var count : Int {
get {
return Int(RankSet.counts[Int(rankSet)])
// ^^^^^^^^
}
}