TLDR
Akım:
- Swift :
if #available(iOS 9, *)
- Obj-C, iOS :
if (@available(iOS 11.0, *))
- Obj-C, OS X :
if (NSClassFromString(@"UIAlertController"))
Eski:
- Swift (2.0'dan önceki sürümler) :
if objc_getClass("UIAlertController")
- Obj-C, iOS (4.2'den önceki sürümler) :
if (NSClassFromString(@"UIAlertController"))
- Obj-C, iOS (11.0'dan önceki sürümler) :
if ([UIAlertController class])
Swift 2+
Geçmişte belirli işletim sistemi sürümleri yerine yetenekleri (veya sınıf varlığını) kontrol etmeniz önerilmiş olsa da, kullanılabilirlik kontrolünün getirilmesi nedeniyle Swift 2.0'da bu pek işe yaramıyor .
Bunun yerine şu yolu kullanın:
if #available(iOS 9, *) {
let stackView = UIStackView(...)
} else {
let tableView = UITableView(...)
}
Not: Bunun yerine kullanmayı denerseniz objc_getClass()
, aşağıdaki hatayı alırsınız:
⛔️ 'UIAlertController' yalnızca iOS 8.0 veya daha yeni sürümlerde kullanılabilir.
Swift'in önceki sürümleri
if objc_getClass("UIAlertController") != nil {
let alert = UIAlertController(...)
} else {
let alert = UIAlertView(...)
}
Veya seçeneğinden objc_getClass()
daha güvenilir olduğunuNSClassFromString()
objc_lookUpClass()
unutmayın .
Objective-C, iOS 4.2+
if ([SomeClass class]) {
SomeClass *instance = [[SomeClass alloc] init];
} else {
}
Daha fazla ayrıntı için kod 007'nin cevabına bakın .
OS X veya iOS'un önceki sürümleri
Class klass = NSClassFromString(@"SomeClass");
if (klass) {
// class exists
id instance = [[klass alloc] init];
} else {
// class doesn't exist
}
Kullanın NSClassFromString()
. Dönerse nil
, sınıf mevcut değildir, aksi takdirde kullanılabilecek sınıf nesnesini döndürür.
Bu belgede Apple'a göre önerilen yoldur :
[...] Kodunuz, kullanarak [a] sınıfının varlığını test eder ve bu, [] sınıfı
NSClassFromString()
varsa geçerli bir sınıf nesnesi döndürür, yoksa sıfırdır. Sınıf mevcutsa, kodunuz onu kullanabilir [...]