TLDR
Arus:
- Swift :
if #available(iOS 9, *)
- Obj-C, iOS :
if (@available(iOS 11.0, *))
- Obj-C, OS X :
if (NSClassFromString(@"UIAlertController"))
Warisan:
- Swift (versi sebelum 2.0) :
if objc_getClass("UIAlertController")
- Obj-C, iOS (versi sebelum 4.2) :
if (NSClassFromString(@"UIAlertController"))
- Obj-C, iOS (versi sebelum 11.0) :
if ([UIAlertController class])
Cepat 2+
Meskipun secara historis disarankan untuk memeriksa kemampuan (atau keberadaan kelas) daripada versi OS tertentu, ini tidak berfungsi dengan baik di Swift 2.0 karena diperkenalkannya pemeriksaan ketersediaan .
Gunakan cara ini sebagai gantinya:
if #available(iOS 9, *) {
let stackView = UIStackView(...)
} else {
let tableView = UITableView(...)
}
Catatan: Jika Anda malah mencoba menggunakanobjc_getClass()
, Anda akan mendapatkan error berikut:
⛔️ 'UIAlertController' hanya tersedia di iOS 8.0 atau yang lebih baru.
Versi Swift sebelumnya
if objc_getClass("UIAlertController") != nil {
let alert = UIAlertController(...)
} else {
let alert = UIAlertView(...)
}
Perhatikan bahwa objc_getClass()
lebih dapat diandalkan daripada NSClassFromString()
atauobjc_lookUpClass()
.
Objective-C, iOS 4.2+
if ([SomeClass class]) {
SomeClass *instance = [[SomeClass alloc] init];
} else {
}
Lihat jawaban code007 untuk lebih jelasnya .
OS X atau iOS versi sebelumnya
Class klass = NSClassFromString(@"SomeClass");
if (klass) {
// class exists
id instance = [[klass alloc] init];
} else {
// class doesn't exist
}
Menggunakan NSClassFromString()
. Jika dikembalikan nil
, kelas tersebut tidak ada, jika tidak maka akan mengembalikan objek kelas yang dapat digunakan.
Ini adalah cara yang direkomendasikan menurut Apple dalam dokumen ini :
[...] Kode Anda akan menguji keberadaan kelas [a]
NSClassFromString()
yang akan mengembalikan objek kelas yang valid jika kelas [itu] ada atau nihil jika tidak ada. Jika kelas tersebut ada, kode Anda dapat menggunakannya [...]