为什么我会得到"静态会员' ...'不能用于类型' ...'"的实例错误?

时间:2016-03-28 21:56:00

标签: swift static compiler-errors

以下是在实例方法中直接使用静态成员:

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'

类型的实例

Screenshot

由于静态成员在我的类的所有实例之间共享,因此所有实例成员(包括count)都应该可以访问counts成员。这是怎么回事?

1 个答案:

答案 0 :(得分:26)

错误消息具有误导性:可以从任何具有适当可见性的代码访问静态成员,包括实例方法。

但是,Swift没有提供从实例方法访问静态成员的简短名称 - 这是许多其他编程语言的常见功能。这就是造成上述错误的原因。

Swift坚持完全限定静态成员的名称,如下所示:

public var count : Int {
    get {
        return Int(RankSet.counts[Int(rankSet)])
        //         ^^^^^^^^
    }
}