- @objcÇıkarım nedir? Ne oluyor?
İçinde Swift 3, derleyici @objcbir dizi yere girer , böylece zorunda kalmazsınız. Başka bir deyişle, @objcsizin için eklemeyi sağlar!
İçinde Swift 4, derleyici artık bunu yapmıyor (o kadar). Şimdi @objcaçıkça eklemelisiniz .
Varsayılan olarak, Swift 4 öncesi bir projeniz varsa, bu konuda uyarılar alırsınız. Bir Swift 4 projesinde, derleme hataları alacaksınız. Bu, SWIFT_SWIFT3_OBJC_INFERENCEyapı ayarı ile kontrol edilir . Swift 4 öncesi bir projede bu olarak ayarlanır On. Bunu şimdi Defaultveya Offyeni bir projede varsayılan seçenek olan (veya ) olarak ayarlamanızı öneririm .
Her şeyi dönüştürmek biraz zaman alacaktır, ancak Swift 4 için varsayılan olduğundan, yapmaya değer.
- Derleyici uyarılarını / hatalarını nasıl durdurabilirim?
Kodunuzu dönüştürmenin iki yolu vardır, böylece derleyici şikayette bulunmaz.
Bunlardan biri, @objcObjective-C çalışma zamanına maruz bırakılması gereken her işlev veya değişken üzerinde kullanmaktır :
@objc func foo() {
}
Diğeri @objcMembersbir Classdeklarasyon ile kullanmaktır . Bu , sınıftaki TÜM işlevleri ve değişkenleri otomatik olarak eklemenizi @objcsağlar . Bu kolay bir yoldur, ancak bir maliyeti vardır, örneğin, maruz kalması gerekmeyen işlevleri ortaya çıkararak uygulamanızın boyutunu artırabilir.
@objcMembers class Test {
}
- Nedir @objcve neden gereklidir?
Bir Swift sınıfına yeni yöntemler veya değişkenler eklerseniz, bunları işaretleme olarak @objcObjective-C çalışma zamanına maruz bırakır. Swift sınıfınızı kullanan Objective-C kodunuz varsa veya gibi Objective-C tipi özellikler kullanıyorsanız bu gereklidir Selectors. Örneğin, hedef eylem modeli:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Neden her şeyi işaretlemeyeyim ki @objc?
Bir şeyi işaretlemekle birlikte gelen negatifler vardır @objc:
- Artan uygulama ikili boyutu
- İşlev aşırı yüklenmesi yok
Lütfen bunun çok üst düzey bir özet olduğunu ve yazdığımdan daha karmaşık olduğunu unutmayın. Daha fazla bilgi için asıl teklifi okumanızı tavsiye ederim.
Kaynaklar: