2015-03-27 26 views
6

NSTimer'den statik bir yöntemi çağırmasına izin var mı? derleyici çağrısında şifreli "Ekstra argüman 'selektör' ile şikayetçi, buna izin vermez.NSTimer'den statik bir yöntem çağırma. Mümkün mü?

struct MyStruct { 
     static func startTimer() { 
      NSTimer.scheduledTimerWithTimeInterval(1.0, target: MyStruct.self, selector: "doStuff", userInfo: nil, repeats: true) 
     } 

     static func doStuff() { 
      println("Doin' it.") 
     } 
    } 

    MyStruct.startTimer() 

Ama tabii, bu gayet iyi çalışıyor ...

class MyClass { 
    func startTimer() { 
     NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "doStuff", userInfo: nil, repeats: true) 
    } 

    func doStuff() { 
     println("Doin' it.") 
    } 
} 

var instanceOfClass = MyClass() 
instanceOfClass.startTimer() 

Sadece sözdizimi var mı yanlış ya da

cevap

3

NSTimer? izin dinamik yöntemleri çağırmak için Objective-C çalışma zamanını kullanır değildir. ne zaman Swift çalışma zamanını kullanırken, bir struct beyan, NSTimer işbirliği yapmak için bu nedenle mümkün değildir. Yapılar farklılık fr om sınıfları ve bunlarla ilgili daha fazlasını okuyabilirsiniz here. Ben hemen hemen aynı koda sahip

class MyClass: NSObject { 
    class func startTimer() { 
     NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "doStuff", userInfo: nil, repeats: true) 
    } 

    class func doStuff() { 
     println("Doin' it.") 
    } 
} 

MyClass.startTimer() 
+1

ve öyle:

Ayrıca, static işlev Objective-C Sınıf yöntemi eşdeğer olduğunu orijinal hedefi oldu eğer öyleyse aşağıdaki yeterli olacaktır olduğunu çalışmıyor Aslında, bu tam kodda yapıştırırsam, işe yaramıyor. 'Tanınmayan seçici '...' Sınıfı 'kullananlar için çalıştı mı? – SimplGy

+0

@SimplGy: İşlevinizi '@ objc' özniteliği ile öneklemeye çalışın. –

+2

Not: Sınıfınızı func seçicinizi bulmak için 'NSObject''den miras almalısınız. Eğer yapmazsanız, bir çalışma zamanı kazası 'Unrecognized selector 'alırsınız. – SimplGy

İlgili konular