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

  • AndroidSale

    AndroidSale

    17 NİSAN 2011
  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • We've moved!

    We've moved!

    7 Ocak 2008