TLDR
Aktuell:
- Swift :
if #available(iOS 9, *)
- Obj-C, iOS :
if (@available(iOS 11.0, *))
- Obj-C, OS X :
if (NSClassFromString(@"UIAlertController"))
Erbe:
- Swift (Versionen vor 2.0) :
if objc_getClass("UIAlertController")
- Obj-C, iOS (Versionen vor 4.2) :
if (NSClassFromString(@"UIAlertController"))
- Obj-C, iOS (Versionen vor 11.0) :
if ([UIAlertController class])
Swift 2+
Obwohl in der Vergangenheit empfohlen wurde, anstelle bestimmter Betriebssystemversionen nach Funktionen (oder Klassenexistenz) zu suchen, funktioniert dies in Swift 2.0 aufgrund der Einführung der Verfügbarkeitsprüfung nicht gut .
Verwenden Sie stattdessen diesen Weg:
if #available(iOS 9, *) {
// You can use UIStackView here with no errors
let stackView = UIStackView(...)
} else {
// Attempting to use UIStackView here will cause a compiler error
let tableView = UITableView(...)
}
Hinweis: Wenn Sie stattdessen versuchen, zu verwenden objc_getClass()
, wird der folgende Fehler angezeigt:
⛔️ 'UIAlertController' ist nur unter iOS 8.0 oder neuer verfügbar.
Frühere Versionen von Swift
if objc_getClass("UIAlertController") != nil {
let alert = UIAlertController(...)
} else {
let alert = UIAlertView(...)
}
Beachten Sie, dass dies objc_getClass()
zuverlässiger ist als NSClassFromString()
oderobjc_lookUpClass()
.
Objective-C, iOS 4.2+
if ([SomeClass class]) {
// class exists
SomeClass *instance = [[SomeClass alloc] init];
} else {
// class doesn't exist
}
Weitere Informationen finden Sie in der Antwort von code007 .
OS X oder frühere Versionen von iOS
Class klass = NSClassFromString(@"SomeClass");
if (klass) {
// class exists
id instance = [[klass alloc] init];
} else {
// class doesn't exist
}
Verwenden Sie NSClassFromString()
. Wenn es zurückgibt nil
, existiert die Klasse nicht, andernfalls wird das Klassenobjekt zurückgegeben, das verwendet werden kann.
Dies ist laut Apple in diesem Dokument der empfohlene Weg :
[...] Ihr Code würde die Existenz einer [a] -Klasse testen,
NSClassFromString()
die ein gültiges Klassenobjekt zurückgibt, wenn [die] Klasse existiert, oder null, wenn dies nicht der Fall ist. Wenn die Klasse existiert, kann Ihr Code sie verwenden [...]