TLDR
Atual:
- Swift :
if #available(iOS 9, *)
- Obj-C, iOS :
if (@available(iOS 11.0, *))
- Obj-C, OS X :
if (NSClassFromString(@"UIAlertController"))
Legado:
- Swift (versões anteriores a 2.0) :
if objc_getClass("UIAlertController")
- Obj-C, iOS (versões anteriores a 4.2) :
if (NSClassFromString(@"UIAlertController"))
- Obj-C, iOS (versões anteriores a 11.0) :
if ([UIAlertController class])
Swift 2+
Embora historicamente seja recomendado verificar os recursos (ou existência de classe) em vez de versões específicas do sistema operacional, isso não funciona bem no Swift 2.0 por causa da introdução da verificação de disponibilidade .
Use desta forma:
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(...)
}
Observação: se você tentar usar objc_getClass()
, receberá o seguinte erro:
⛔️ 'UIAlertController' está disponível apenas no iOS 8.0 ou mais recente.
Versões anteriores de Swift
if objc_getClass("UIAlertController") != nil {
let alert = UIAlertController(...)
} else {
let alert = UIAlertView(...)
}
Observe que objc_getClass()
é mais confiável do que NSClassFromString()
ouobjc_lookUpClass()
.
Objective-C, iOS 4.2+
if ([SomeClass class]) {
// class exists
SomeClass *instance = [[SomeClass alloc] init];
} else {
// class doesn't exist
}
Veja a resposta do code007 para mais detalhes .
OS X ou versões anteriores do iOS
Class klass = NSClassFromString(@"SomeClass");
if (klass) {
// class exists
id instance = [[klass alloc] init];
} else {
// class doesn't exist
}
Use NSClassFromString()
. Se retornar nil
, a classe não existe, caso contrário, ele retornará o objeto de classe que pode ser usado.
Esta é a forma recomendada de acordo com a Apple neste documento :
[...] Seu código testaria a existência de [uma] classe usando o
NSClassFromString()
qual retornará um objeto de classe válido se [a] classe existir ou nulo se não existir. Se a classe existe, seu código pode usá-la [...]