Muszę sprawdzić, czy obiekt jest typu NSString
czy UIImageView
. Jak mogę to osiągnąć? Czy istnieje jakiś rodzaj metody „izoftype”?
ios
objective-c
James Skidmore
źródło
źródło
[object isKindOfClass:[ClassName class]]
Odpowiedzi:
Jeśli Twoim obiektem jest
myObject
, a chcesz przetestować, czy jest toNSString
, kod będzie:Podobnie, jeśli chcesz przetestować
myObject
dlaUIImageView
:źródło
Prawdopodobnie byś użył
To jest metoda
NSObject
.Aby uzyskać więcej informacji, sprawdź
NSObject
dokumentację.Tak to wykorzystujesz.
Możesz także spróbować zrobić coś takiego
źródło
className
, może działać lub nie w systemie OS X, ale nie ma go w systemie iOS i nie jest przeznaczony do tego. Ponadto,NSLog
nie robią tego, co myśleliście, że mieliście na myśli - sprawdzają nazwę klasy (zawsze łańcuch) i, o dziwo, klasę kodera, zamiast klasy rzeczywistego elementu.NSLog(@"Is of type: %@", [element class]);
będzie działać w iOS 7Jeśli chcesz różnić się między klasą superClass a dziedziczoną klasą, możesz użyć:
Użycie
- (BOOL)isKindOfClass:(Class)aClass
w tym przypadku spowoduje PRAWDA za każdym razem, ponieważ dziedziczona klasa jest również rodzajem superklasy.źródło
isMemberOfClass:
powróci wNO
przypadku podklas.Przeprowadzając prosty test, pomyślałem, że udokumentuję, co działa, a co nie. Często widzę ludzi sprawdzających, czy klasa obiektu jest członkiem innej klasy, czy jest równa drugiej klasie.
W poniższym wierszu mamy kilka źle sformułowanych danych, które mogą być an
NSArray
, anNSDictionary
lub(null)
.Oto testy, które zostały przeprowadzone:
isKindOfClass
działał raczej dobrze, aisMemberOfClass
nie.źródło
Możesz skorzystać z następującego kodu, aby sprawdzić typy prymitywnych typów danych.
źródło
Prosta [klasa twojego obiektu] zwróci nazwę klasy twojego obiektu.
źródło
Class
obiekt. Jednakdescription
tym obiektem będzie nazwa klasy jako ciąg znaków, dlatego nadal można go zalogować do konsoli.