2016-03-09 21 views
26

Sto tentando di creare un metodo di accesso a un singleton. Sto ottenendo questo errore (vedi il codice sotto). Non capisco perché sto ricevendo questo errore e cosa significa questo errore. Qualcuno può spiegare?Membro statico non può essere utilizzato su istanza di tipo

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    static private var thedelegate: AppDelegate? 

    class var delegate : AppDelegate { 
    return thedelegate! 
    } 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    thedelegate = self // syntax error: Static member 'thedelegate' cannot be used on instance of type 'AppDelegate' 
+5

'AppDelegate.thedelegate = self' –

+0

che è la soluzione a questo problema, ma Sasha ha spiegato – andrewz

risposta

17

Si sta tentando di accedere a variabili di livello di classe dall'istanza di tale classe. Per utilizzarlo è necessario creare una funzione di livello di classe: static func(). Prova questo:

static func sharedDelegate() -> AppDelegate { 
    return UIApplication.sharedApplication().delegate as! AppDelegate 
} 
+9

"Stai provando ad accedere al parametro di livello di classe dall'istanza" - perché non posso farlo? – andrewz

+0

dai un'occhiata a questa risposta - http://stackoverflow.com/questions/29636633/static-vs-class-functions-variables-in-swift-classes –

+0

hm, l'ho fatto, ma non risponde alla mia domanda. Parla di sovrascrivere i metodi/proprietà statici e di classe. Non sto cercando di scavalcare una proprietà. Sto cercando di accedere a una proprietà statica ('thedelegate') all'interno del metodo di un'istanza. – andrewz

16

È necessario anteporre la variabile statica/classe o funzione con il nome della classe in cui è dichiarata, anche se in quella stessa classe.

In questo caso, si vuole return AppDelegate.thedelegate!

e, come sottolinea Martin R., AppDelegate.thedelegate = self

+1

Perfetto, grazie. –

+1

Sembra incoerente perché se si esegue un comando x = someStatic, esso funziona nell'ambito globale della classe, senza necessità del prefisso. – LegendLength

Problemi correlati