- Apa itu @objckesimpulan? Apa yang sedang terjadi?
Di Swift 3, kompiler menyimpulkan @objcdi sejumlah tempat sehingga Anda tidak perlu melakukannya. Dengan kata lain, itu memastikan untuk menambahkan @objcuntuk Anda!
Di Swift 4, kompiler tidak lagi melakukan ini (sebanyak). Anda sekarang harus menambahkan @objcsecara 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_INFERENCEpengaturan 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 @objcsetiap fungsi atau variabel yang perlu diekspos ke runtime Objective-C:
@objc func foo() {
}
Yang lain adalah dengan menggunakan @objcMembersoleh Classdeklarasi. Hal ini akan memastikan untuk secara otomatis menambahkan @objcke 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 @objcdan mengapa itu perlu?
Jika Anda memperkenalkan metode atau variabel baru ke kelas Swift, menandai mereka sebagai @objcmengekspos 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: