- Apa itu @objc
kesimpulan? Apa yang sedang terjadi?
Di Swift 3
, kompiler menyimpulkan @objc
di sejumlah tempat sehingga Anda tidak perlu melakukannya. Dengan kata lain, itu memastikan untuk menambahkan @objc
untuk Anda!
Di Swift 4
, kompiler tidak lagi melakukan ini (sebanyak). Anda sekarang harus menambahkan @objc
secara eksplisit.
Secara default, jika Anda memiliki proyek pra-Swift 4, Anda akan mendapatkan peringatan tentang ini. Dalam proyek Swift 4, Anda akan mendapatkan galat build. Ini dikontrol melalui SWIFT_SWIFT3_OBJC_INFERENCE
pengaturan build. Dalam proyek pra-Swift 4 ini diatur ke On
. Saya akan merekomendasikan untuk mengatur ini ke Default
(atau Off
), yang sekarang merupakan opsi default pada proyek baru.
Diperlukan waktu untuk mengonversi semuanya, tetapi karena ini adalah default untuk Swift 4, perlu dilakukan.
- Bagaimana saya menghentikan peringatan / kesalahan kompiler?
Ada dua cara untuk mengubah kode Anda sehingga kompiler tidak mengeluh.
Pertama adalah menggunakan @objc
setiap fungsi atau variabel yang perlu diekspos ke runtime Objective-C:
@objc func foo() {
}
Yang lain adalah dengan menggunakan @objcMembers
oleh Class
deklarasi. Hal ini akan memastikan untuk secara otomatis menambahkan @objc
ke semua fungsi dan variabel di kelas. Ini adalah cara yang mudah, tetapi memiliki biaya, misalnya, dapat meningkatkan ukuran aplikasi Anda dengan mengekspos fungsi yang tidak perlu diekspos.
@objcMembers class Test {
}
- Apa itu @objc
dan mengapa itu perlu?
Jika Anda memperkenalkan metode atau variabel baru ke kelas Swift, menandai mereka sebagai @objc
mengekspos mereka ke runtime Objective-C. Ini diperlukan ketika Anda memiliki kode Objective-C yang menggunakan kelas Swift Anda, atau, jika Anda menggunakan fitur tipe Objective-C seperti Selectors
. Misalnya, pola aksi target:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- Mengapa saya tidak menandai semuanya @objc
?
Ada negatif yang muncul dengan menandai sesuatu sebagai @objc
:
- Ukuran biner aplikasi bertambah
- Tidak ada fungsi yang berlebihan
Harap diingat bahwa ini adalah ringkasan yang sangat tinggi dan lebih rumit daripada yang saya tulis. Saya akan merekomendasikan membaca proposal yang sebenarnya untuk informasi lebih lanjut.
Sumber: