2016-03-28 39 views
9

Ecco un uso diretto di un membro statico all'interno di un metodo di istanza:Perché non è possibile utilizzare "Membro statico" ... "nell'errore di tipo" ... ""?

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 produce il seguente errore:

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

Dal membri statici sono condivise tra tutte le istanze della mia classe, tutte le istanze i membri, incluso count, dovrebbero avere accesso al membro counts. Che cosa sta succedendo qui?

risposta

24

Il messaggio di errore è fuorviante: è possibile accedere ai membri statici da qualsiasi parte di codice che abbia visibilità adeguata, che include i metodi di istanza.

Tuttavia, Swift non fornisce un nome breve per l'accesso ai membri statici dai metodi di istanza, una caratteristica comune di molti altri linguaggi di programmazione. Questo è ciò che sta causando l'errore sopra.

Swift insiste sui nomi pienamente qualificanti membri statici, come segue:

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