In Objective-C, ciò che è l'equivalente di parola chiave “instanceof” di Java?
-
22-08-2019 - |
Domanda
Vorrei verificare se un oggetto (ad esempio someObject
) è programmabile (Cast-grado) di una variabile di un altro tipo (ad esempio SpecifiedType
). In Java, posso scrivere:
someObject instanceof SpecifiedType
Una questione collegata è trovare se il tipo di esecuzione di un oggetto è uguale a un altro tipo. In Java, posso scrivere:
someObject.getClass().equals(SpecifiedType.class)
Come può essere fatto in Objective-C?
Soluzione
[myObject class]
provare per restituire la classe di un oggetto.
È possibile fare paragoni esatti con:
if ([myObject class] == [MyClass class])
, ma non utilizzando identificatore direttamente MyClass
.
In modo simile, è possibile trovare se l'oggetto è di una sottoclasse della classe con:
if ([myObject isKindOfClass:[AnObject class]])
come suggerito da Jon Skeet e Zoul.
Altri suggerimenti
In Objective-C, per esempio, sia la
Object
generico eNSObject
(in Cacao / OpenStep) forniscono il metodoisMemberOfClass:
che restituiscetrue
se l'argomento del metodo è un istanza della classe specificata. Il MetodoisKindOfClass:
analogamente restituisce true se l'argomento eredita dalla classe specificata.
isKindOfClass:
sarebbe più vicino alla instanceof
, dai suoni di esso.
Vedere la isKindOfClass: metodo nel NSObject documentazione. (La parola usuale di avvertimento per tale domanda è che il controllo della classe di oggetti è spesso un segno di fare qualcosa di sbagliato.)