Ich muss testen, ob das Objekt vom Typ NSString
oder ist UIImageView
. Wie kann ich das erreichen? Gibt es eine Art "Isoftype" -Methode?
ios
objective-c
James Skidmore
quelle
quelle
[object isKindOfClass:[ClassName class]]
Antworten:
Wenn Ihr Objekt ist
myObject
und Sie testen möchten, ob es ein Objekt ist , lautetNSString
der Code:Ebenso, wenn Sie auf Folgendes testen
myObject
möchtenUIImageView
:quelle
Sie würden wahrscheinlich verwenden
Dies ist eine Methode von
NSObject
.Weitere Informationen finden Sie in der
NSObject
Dokumentation.So verwenden Sie dies.
Sie könnten auch versuchen, so etwas zu tun
quelle
className
, es kann unter OS X funktionieren oder nicht, aber es ist nicht in iOS und es ist nicht dafür gedacht. AußerdemNSLog
tun diese nicht das, was Sie meiner Meinung nach gemeint haben - sie überprüfen seltsamerweise den Klassennamen (immer eine Zeichenfolge) und die Codiererklasse anstelle der Klasse des eigentlichen Elements.NSLog(@"Is of type: %@", [element class]);
funktioniert in iOS 7Wenn Sie zwischen einer Superklasse und der geerbten Klasse unterscheiden möchten, können Sie Folgendes verwenden:
Die Verwendung
- (BOOL)isKindOfClass:(Class)aClass
in diesem Fall würde beide Male zu TRUE führen, da die inheritedClass auch eine Art SuperClass ist.quelle
isMemberOfClass:
wirdNO
beim Umgang mit Unterklassen zurückkehren.Bei einem einfachen Test dachte ich, ich würde dokumentieren, was funktioniert und was nicht. Oft sehe ich Leute, die prüfen, ob die Klasse des Objekts Mitglied der anderen Klasse ist oder der anderen Klasse entspricht.
Für die folgende Zeile haben wir einige schlecht geformte Daten, die ein
NSArray
, einNSDictionary
oder sein können(null)
.Dies sind die Tests, die durchgeführt wurden:
isKindOfClass
funktionierte ziemlich gut, währendisMemberOfClass
nicht.quelle
Sie können den folgenden Code verwenden, falls Sie die Typen primitiver Datentypen überprüfen möchten.
quelle
Einfach, [Ihre Objektklasse] gibt den Klassennamen Ihres Objekts zurück.
quelle
Class
Objekt zurückgegeben. Dasdescription
Objekt dieses Objekts ist jedoch der Klassenname als Zeichenfolge, sodass Sie ihn weiterhin in der Konsole protokollieren können.