Saya memiliki sepotong kode yang menghasilkan banyak peringatan (API yang tidak berlaku lagi)
Menggunakan dentang * saya bisa melakukannya
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
...
#pragma clang diagnostic pop
Namun ini tidak bekerja dengan cepat.
Bagaimana cara melakukannya dengan cepat?
Catatan: Saya tidak ingin menonaktifkan peringatan secara global, atau bahkan lebar file, tetapi hanya menonaktifkan peringatan tertentu di bagian tertentu dari kode sumber saya.
Sunting: Sepertinya catatan saya tidak cukup jelas: Saya TIDAK ingin kompilasi bersyarat (yang merupakan jawaban yang diusulkan dari duplikat yang seharusnya). Saya hanya ingin membungkam peringatan TANPA menggunakan API baru.
#available
makro baru di mana pengembang harus menggunakan metode baru dan mundur ke yang lama jika yang baru tidak tersedia.Jawaban:
Pada tahun 2020, Xcode 12.0, konsensusnya adalah tidak ada cara untuk mencapai itu.
Saya akan memperbarui / mengedit jawaban ini jika Apple menambahkan fitur tersebut.
Taruh di daftar keinginan Anda untuk WWDC 2021!
sumber
Tidak ada konstruksi umum untuk membungkam peringatan penghentian di Swift, tetapi ada solusi yang dapat diterapkan dalam banyak kasus .
Katakanlah Anda memiliki metode
getLatestImage()
di kelasFoo
yang menggunakan metode / kelas yang tidak digunakan lagi.Gunakan
@available
seperti yang dijelaskan Daniel Thorpe untuk membungkam semua peringatan di dalam metode:Sekarang Anda ingin memanggil metode tersebut
getLatestImage()
tanpa peringatan penghentian. Anda dapat mencapainya dengan terlebih dahulu menentukan protokol dan ekstensi:Dan kemudian panggil metode tanpa peringatan penghentian (jika
foo
adalah turunan dariFoo
):Hasilnya adalah Anda memiliki kode Swift yang menggunakan API yang tidak berlaku lagi tanpa peringatan penghentian apa pun.
sumber
Sebenarnya, Anda bisa menyembunyikan peringatan ini dengan menggunakan
@available
struktur logis yang melingkupinya (yaitu fungsi / tipe).Misalnya, Anda memiliki beberapa kode yang menggunakan kerangka AddressBook, tetapi Anda membangunnya dengan iOS 9.
Pada Xcode 7.0.1 ini akan mencegah peringatan sebaris ditampilkan.
sumber
addressBookStatus()
... yang Anda tandai sebagai usang.class ViewController: UIViewController
)if CGFloat(0).native is Float { … }
? Jawaban: Saya tidak menggunakan ini karena Anda tidak menjawab pertanyaannya.Meskipun tidak ada cara untuk membungkam peringatan deprecation di Swift untuk saat ini, secara teknis Anda dapat melakukannya untuk simbol tertentu dengan mengedit file header.
File
>Open Quickly
Tempel simbol dan tekan
Enter
Pastikan ikon Swift dinonaktifkan di kotak Buka Cepat
Pilih
File
>Show in Finder
dengan
Sekarang ada satu peringatan yang tidak terlalu mengganggu yang tidak dapat Anda lakukan.
Aku tahu, ini kotor. Tetapi jika tidak ada API pengganti yang tersedia di SDK saat ini, itu seharusnya aman. Setelah versi baru Xcode keluar, perubahan akan ditimpa dan Anda akan melihat peringatan itu lagi. Kemudian Anda dapat menguji SDK dan OS baru untuk memastikan API yang dihentikan masih tersedia dan tidak mendapatkan penggantinya.
Tolong beri komentar jika Anda dapat menemukan kerugian.
sumber