TLDR
Actual:
- Rápido :
if #available(iOS 9, *)
- Obj-C, iOS :
if (@available(iOS 11.0, *))
- Obj-C, OS X :
if (NSClassFromString(@"UIAlertController"))
Legado:
- Swift (versiones anteriores a la 2.0) :
if objc_getClass("UIAlertController")
- Obj-C, iOS (versiones anteriores a 4.2) :
if (NSClassFromString(@"UIAlertController"))
- Obj-C, iOS (versiones anteriores a la 11.0) :
if ([UIAlertController class])
Swift 2+
Aunque históricamente se ha recomendado verificar las capacidades (o la existencia de clases) en lugar de versiones específicas del sistema operativo, esto no funciona bien en Swift 2.0 debido a la introducción de la verificación de disponibilidad .
Use esta forma en su lugar:
if
// 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(...)
}
Nota: Si, en cambio, intenta utilizar objc_getClass()
, obtendrá el siguiente error:
⛔️ 'UIAlertController' solo está disponible en iOS 8.0 o posterior.
Versiones anteriores de Swift
if objc_getClass("UIAlertController") != nil {
let alert = UIAlertController(...)
} else {
let alert = UIAlertView(...)
}
Tenga en cuenta que objc_getClass()
es más confiable que NSClassFromString()
oobjc_lookUpClass()
.
Objective-C, iOS 4.2+
if ([SomeClass class]) {
SomeClass *instance = [[SomeClass alloc] init];
} else {
}
Consulte la respuesta de code007 para obtener más detalles .
OS X o versiones anteriores de iOS
Class klass = NSClassFromString(@"SomeClass");
if (klass) {
// class exists
id instance = [[klass alloc] init];
} else {
// class doesn't exist
}
Utilice NSClassFromString()
. Si regresa nil
, la clase no existe; de lo contrario, devolverá el objeto de clase que se puede usar.
Esta es la forma recomendada según Apple en este documento :
[...] Su código probaría la existencia de [una] clase usando la
NSClassFromString()
cual devolverá un objeto de clase válido si [la] clase existe o nulo si no lo hace. Si la clase existe, su código puede usarla [...]