SORU
3 HAZİRAN 2014, Salı


@seçici() Swift?

Swift NSTimer Bir oluşturmak için çalışıyorum ama bazı sorunlarım var.

NSTimer(timeInterval: 1, target: self, selector: test(), userInfo: nil, repeats: true)

test() aynı sınıfta bir fonksiyonudur.


Editör bir hata alıyorum: Could not find an overload for 'init' that accepts the supplied arguments

selector: nil selector: test() değiştirdiğimde hata kaybolur.

Denedim:

  • selector: test()
  • selector: test
  • selector: Selector(test())

Ama hiçbir şey inşaat ve referanslar da bir çözüm bulamıyorum.

CEVAP
3 HAZİRAN 2014, Salı


Swift seçiciler kullanmaz — seçiciler kullanmak ObjC desenleri birkaç Swift başka bir şey ile değiştirilir. (respondsToSelector: testler yerine isteğe bağlı zincirleme kullanın ve türü güvenli değil çünkü performSelector: kullanmayın.)

ObjC tabanlı bir API bu seçiciler Al ile etkileşim, bir temsil eden bir dize; örneğin kullanabilirsiniz

myButton.addTarget(self, action: "buttonTapped:", forControlEvents: .TouchUpInside)
let timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval: 1, target: self, selector: "test", userInfo: nil, repeats: false)

Swift Selector türü ObjC haritalar SEL türü. Selector gerektiğinde otomatik olarak bir dize oluşturulabilir beri Selector("string") NSSelectorFromString("string") geçmesine gerek yok.

Seçiciler ObjC bir şey olduğu için, onların dizeleri ObjC yöntem kurallar—bir bağımsız değişken alan bir yöntem adlandırma izleyin, seçici bir kolon ile sona erer (":"). Örneğin, bir yöntem test() adlı seçici dize sadece "test" ama test(this:String) "test:" olduğu için seçici olduğunu.

Ayrıca bu yöntem seçici tarafından başvurulan ObjC çalışma zamanı maruz olması gerektiğini unutmayın. Zaten bu durumda eğer bir sınıf (sonuçta) devralır NSObject ama eğer bir saf Swift sınıfı gerek Önsöz bu yöntem bildirimi ile @objc. private semboller çalışma zamanı için, çok açıkta değil — yöntem internal görünürlük en az olması gerektiğini unutmayın.

Kullanarak seçiciler Interacting with Objective-C APIs kapsamındadırKakao ve Objective-C ile Hızlı kullanma.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • andony5589

    andony5589

    7 Aralık 2011
  • macpulenta

    macpulenta

    9 EYLÜL 2006