Saya mencoba mengubah kode sumber proyek saya dari Swift 3 ke Swift 4. Satu peringatan yang diberikan Xcode kepada saya adalah tentang penyeleksi saya.
Misalnya, saya menambahkan target ke tombol menggunakan pemilih biasa seperti ini:
button.addTarget(self, action: #selector(self.myAction), for: .touchUpInside)
Ini peringatan yang ditunjukkannya:
Argumen '#selector' merujuk ke metode instance 'myAction ()' di 'ViewController' yang bergantung pada inferensi atribut '@objc' yang tidak digunakan lagi dalam Swift 4
Tambahkan '@objc' untuk mengekspos metode instance ini ke Objective-C
Sekarang, menekan Fixpada pesan kesalahan melakukan ini untuk fungsi saya:
// before
func myAction() { /* ... */ }
// after
@objc func myAction() { /* ... */ }
Saya tidak benar-benar ingin mengubah nama semua fungsi saya untuk memasukkan @objctanda dan saya berasumsi itu tidak perlu.
Bagaimana cara menulis ulang pemilih untuk mengatasi penghinaan?
Pertanyaan terkait:
@objc? Itu agak menjengkelkan, tapi saya biasanya membuat fungsi-fungsi ini pribadi, mengharuskan saya untuk menandainya sebagai @objcanyways.
@objcMembersuntuk mengekspos semua anggota yang kompatibel dengan Obj-C ke Obj-C, tetapi saya tidak akan menyarankan itu kecuali Anda benar-benar membutuhkan seluruh kelas Anda untuk diekspos.

@objcyang sekarang diperlukan dalam rangka untuk mengekspos mereka untuk obj-C, dan karena itu digunakan dengan pemilih.