Muszę sprawdzić, czy obiekt jest typu NSString
lub UIImageView
. Jak mogę to zrobić? Czy istnieje jakiś rodzaj metody "isoftype"?W Objective-C, jak przetestować typ obiektu?
Odpowiedz
Jeśli obiekt jest myObject
i chcesz przetestować, aby sprawdzić, czy jest to NSString
, kod byłoby:
[myObject isKindOfClass:[NSString class]]
Podobnie, jeśli chcesz przetestować myObject
dla UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Zauważ, że istnieje również metoda isMemberOfClass:, która sprawdzi, czy klasa jest "dokładnością". Należy jednak zachować ostrożność, ponieważ wiele obiektów Apple jest w przebraniu typu Core Foundation. (Np. NSString jest częściej NSCFString, a isMemberOfClass: zwróci false dla tego porównania.) –
Uwaga ta metoda jest bardzo powolna! – SAKrisT
Czy to prawda, wiedząc, że NSString to klaster klasy? (jak NSNumber) – Ricardo
pewnie można użyć
- (BOOL)isKindOfClass:(Class)aClass
To jest metoda z NSObject
.
Aby uzyskać więcej informacji, zapoznaj się z dokumentacją NSObject
.
Oto jak tego używasz.
BOOL test = [self isKindOfClass:[SomeClass class]];
Można też spróbować zrobić somthing jak ten
for(id element in myArray)
{
NSLog(@"=======================================");
NSLog(@"Is of type: %@", [element className]);
NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");
NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");
}
co to jest 'className' Nie mogę uzyskać pracy z moimi identyfikatorami –
tak nie ma czegoś takiego –
-1: Nie używaj' className', to może lub nie działać na OS X, ale nie ma go iOS i nie jest przeznaczony do tego celu. Ponadto te 'NSLog's nie robią tego, co moim zdaniem miałeś na myśli - sprawdzają nazwę klasy (zawsze ciąg) i klasę kodera, co dziwne, zamiast klasy rzeczywistego elementu. – andyvn22
Running prosty test, pomyślałem, że dokument, co działa a co nie. Często widzę, że ludzie sprawdzają, czy klasa obiektu jest członkiem innej klasy lub jest równa drugiej klasie.
Na poniższej linii, mamy pewne dane, które słabo uformowanych może być NSArray
An NSDictionary
lub (null)
.
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
Są to testy, które przeprowadzono:
NSLog(@"%@", [hits class]);
if ([hits isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
isKindOfClass
pracował dość dobrze podczas isMemberOfClass
nie.
Kiedy chcesz się różnią między nadklasą i inheritedClass można użyć:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
Korzystanie - (BOOL)isKindOfClass:(Class)aClass
w tym przypadku spowoduje to zarówno razy, ponieważ inheritedClass jest również rodzajem nadklasy.
'isMemberOfClass:' zwróci 'NIE' przy kontaktach z podklasami. – mipadi
Możesz użyć następującego kodu, pod którym chcesz sprawdzić typy pierwotnych typów danych.
// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double))
Prosta, [klasa yourobject] zwróci nazwę klasy yourobject.
W rzeczywistości zwróci obiekt "Class". Jednak "opis" tego obiektu będzie nazwą klasy jako ciągiem znaków, dzięki czemu można w dalszym ciągu logować ją do konsoli. – devios1
- 1. Jak przetestować istnienie obiektu w Firebird SQL?
- 2. Typ Rzucanie obiektu przy użyciu obiektu "Typ" w języku C#
- 3. Jak uzyskać typ obiektu COM
- 4. Jak poznać typ obiektu jQuery?
- 5. Wdrożenie ObjectiveC protokół w szybkim
- 6. Jak sprawdzić typ obiektu w C++/CLI?
- 7. Typ JavaScript obiektu niestandardowego
- 8. Jak przetestować tę samą instancję obiektu w JavaScript?
- 9. ObjectiveC Parse Integer from String
- 10. Jak uzyskać typ klasy bez inicjowania obiektu?
- 11. Jak ustawić typ zawartości obiektu XDomainRequest?
- 12. Sprawdź typ obiektu ios swift
- 13. uzyskać możliwą instancję/typ obiektu
- 14. Znajdź typ obiektu python zachęty
- 15. referencyjny i Typ obiektu Zmiana listy Java
- 16. Jaki jest typ obiektu zagnieżdżonego w scala
- 17. Dopasuj typ danych obiektu w Swift
- 18. Jak określić rzeczywisty typ obiektu w środowisku wykonawczym w C++;
- 19. Sprawdzanie typ obiektu w C++ 11
- 20. Uzyskanie podstawowej typ obiektu proxy
- 21. Jak utworzyć nowy typ obiektu w Microsoft Robotics Studio 2.0?
- 22. Jak uzyskać typ obiektu dynamicznego w języku C#?
- 23. Jak przetestować bibliotekę wewnętrzną?
- 24. ObjectiveC: gdzie zadeklarować prywatne właściwości instancji?
- 25. Szyny: Jak przetestować kod w katalogu lib /?
- 26. Symfony2 Niestandardowy typ forma korzystania podmiot próbuje przetestować
- 27. Jak przetestować wyjątek w AngularJS
- 28. Jak przetestować Branch.io w symulatorze?
- 29. Jak przetestować io.writer w golangu?
- 30. Jak przetestować ModelMetadata.FromLambdaExpression w MVC?
Zobacz: [W Objective-C czym jest equivelant słowa kluczowego "instanceof" java?] (Http://stackoverflow.com/questions/536396/in-objective-c-what-is-the-equivelant- z-the-java-instanceof-keyword) – Reunanen
Tak, istnieje: '[object isKindOfClass: [ClassName class]]' –