2016-03-28 2 views
9

は、インスタンスメソッド内の静的メンバの簡単使用である:静的メンバは、私のクラスのすべてのインスタンス間で共有されているので、すべてのインスタンス、なぜ「静的メンバー '...'はタイプ '...'のインスタンスで使用できません」というエラーが表示されますか?ここ

Static member 'counts' cannot be used on instance of type 'RankSet'

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)]) 
     } 
    } 
} 

スウィフトは、次のエラーが発生しcountを含むメンバーはcountsメンバーにアクセスする必要があります。ここで何が起こっているのですか?

答えて

24

エラーメッセージは誤解を招きます。静的メンバーには、インスタンスメソッドを含む適切な可視性を持つコードからアクセスできます。

しかしSwiftは、他の多くのプログラミング言語の共通の機能であるインスタンスメソッドからの静的メンバーへの短い名前アクセスを提供していません。これが上記のエラーの原因です。

次のようスウィフトは、完全に静的なメンバーの名前を修飾を主張:

public var count : Int { 
    get { 
     return Int(RankSet.counts[Int(rankSet)]) 
     //   ^^^^^^^^ 
    } 
} 
関連する問題