TLDR
Actuel:
- Swift :
if #available(iOS 9, *)
- Obj-C, iOS :
if (@available(iOS 11.0, *))
- Obj-C, OS X :
if (NSClassFromString(@"UIAlertController"))
Héritage:
- Swift (versions antérieures à 2.0) :
if objc_getClass("UIAlertController")
- Obj-C, iOS (versions antérieures à 4.2) :
if (NSClassFromString(@"UIAlertController"))
- Obj-C, iOS (versions antérieures à 11.0) :
if ([UIAlertController class])
Swift 2+
Bien qu'historiquement, il ait été recommandé de vérifier les capacités (ou l'existence de classe) plutôt que des versions spécifiques du système d'exploitation, cela ne fonctionne pas bien dans Swift 2.0 en raison de l'introduction de la vérification de disponibilité .
Utilisez plutôt cette méthode:
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(...)
}
Remarque: si vous essayez d'utiliser à la place objc_getClass()
, vous obtiendrez l'erreur suivante:
⛔️ 'UIAlertController' n'est disponible que sur iOS 8.0 ou plus récent.
Versions précédentes de Swift
if objc_getClass("UIAlertController") != nil {
let alert = UIAlertController(...)
} else {
let alert = UIAlertView(...)
}
Notez que objc_getClass()
c'est plus fiable que NSClassFromString()
ouobjc_lookUpClass()
.
Objective-C, iOS 4.2+
if ([SomeClass class]) {
// class exists
SomeClass *instance = [[SomeClass alloc] init];
} else {
// class doesn't exist
}
Voir la réponse de code007 pour plus de détails .
OS X ou versions précédentes d'iOS
Class klass = NSClassFromString(@"SomeClass");
if (klass) {
// class exists
id instance = [[klass alloc] init];
} else {
// class doesn't exist
}
Utilisez NSClassFromString()
. S'il retourne nil
, la classe n'existe pas, sinon elle retournera l'objet de classe qui peut être utilisé.
C'est la méthode recommandée selon Apple dans ce document :
[...] Votre code testerait l'existence d'une [a] classe en utilisant
NSClassFromString()
qui retournera un objet de classe valide si [la] classe existe ou nul si ce n'est pas le cas. Si la classe existe, votre code peut l'utiliser [...]