【问题标题】:Why do I get "Static member '...' cannot be used on instance of type '...'" error?为什么会出现“静态成员 '...' 不能用于类型 '...' 的实例”错误?
【发布时间】:2016-07-16 06:38:48
【问题描述】:

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

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 成员。这是怎么回事?

【问题讨论】:

    标签: swift static compiler-errors


    【解决方案1】:

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

    但是,Swift 不提供从实例方法访问静态成员的短名称——这是许多其他编程语言的共同特征。这就是导致上述错误的原因。

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-08
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多