2016-03-09 26 views
26

türünde kullanılamaz. Tek bir girişe bir erişim yöntemi oluşturmaya çalışıyorum. Bu hatayı alıyorum (aşağıdaki kod). Neden bu hatayı alıyorum ve bu hatanın ne anlama geldiğini anlamıyorum. Birisi açıklayabilir mi?Statik üye,

@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' Bu sorunun çözümü, ancak Sasha –

+0

"Örnek olarak sınıf düzeyi parametresine erişmeye çalışıyorsunuz" - neden bunu başaramıyorum? – andrewz

cevap

17

Bu sınıf örneğinden, Sınıf düzeyi değişkenine erişmeye çalışıyorsunuz. Sınıf seviyesinde işlev yapmak için kullanmanız gereken: static func(). Bu deneyin:

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

anlatmıştır – andrewz

+0

bu cevabı kontrol edin - http://stackoverflow.com/questions/29636633/static-vs-class-functions-variables-in-swift-classes –

+0

hm, yaptım, ama soruma cevap vermiyor. Statik ve sınıf yöntemleri/özellikleri geçersiz kılma hakkında konuşur. Bir özelliği geçersiz kılmaya çalışmıyorum. Bir örneğin yönteminden bir statik özelliğe ('thedelegate') erişmeye çalışıyorum. – andrewz

16

Hatta zaman aynı sınıfta, bu beyan edildiği sınıf adıyla statik/sınıf değişkeni veya işlevi prepend gerekir. Martin R. belirttiğine göre bu durumda

, sen, return AppDelegate.thedelegate!

istiyoruz ve AppDelegate.thedelegate = self

+1

Mükemmel, teşekkürler. –

+1

Tutarsız görünüyor çünkü eğer x = someStatic yaparsanız, sınıfın global kapsamında çalışır, önek için gerek yoktur. – LegendLength

İlgili konular