- @objc
Çıkarım nedir? Ne oluyor?
İçinde Swift 3
, derleyici @objc
bir dizi yere girer , böylece zorunda kalmazsınız. Başka bir deyişle, @objc
sizin için eklemeyi sağlar!
İçinde Swift 4
, derleyici artık bunu yapmıyor (o kadar). Şimdi @objc
açı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_INFERENCE
yapı ayarı ile kontrol edilir . Swift 4 öncesi bir projede bu olarak ayarlanır On
. Bunu şimdi Default
veya Off
yeni 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, @objc
Objective-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 @objcMembers
bir Class
deklarasyon ile kullanmaktır . Bu , sınıftaki TÜM işlevleri ve değişkenleri otomatik olarak eklemenizi @objc
sağ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 @objc
ve neden gereklidir?
Bir Swift sınıfına yeni yöntemler veya değişkenler eklerseniz, bunları işaretleme olarak @objc
Objective-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: