Nesne türü NSString
veya olup olmadığını sınamak gerekir UIImageView
. Bunu nasıl başarabilirim? Bir çeşit "isoftype" yöntemi var mı?
Nesne türü NSString
veya olup olmadığını sınamak gerekir UIImageView
. Bunu nasıl başarabilirim? Bir çeşit "isoftype" yöntemi var mı?
Yanıtlar:
Nesneniz myObject
ve eğer bir olup olmadığını test etmek istiyorsanız NSString
, kod şöyle olacaktır:
[myObject isKindOfClass:[NSString class]]
Aynı şekilde, test etmek istiyorsa myObject
bir için UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Muhtemelen kullanırdın
- (BOOL)isKindOfClass:(Class)aClass
Bu bir yöntemdir NSObject
.
Daha fazla bilgi için NSObject
belgelere bakın.
Bunu böyle kullanıyorsunuz.
BOOL test = [self isKindOfClass:[SomeClass class]];
Ayrıca böyle bir şey yapmayı deneyebilirsiniz
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");
}
className
, OS X üzerinde çalışabilir veya çalışmayabilir, ancak iOS'ta değildir ve bunun için kullanılması amaçlanmamıştır. Ayrıca, bu NSLog
ne demek istediğini sanmıyorum - onlar sınıf adını (her zaman bir dize) ve coder sınıf, garip bir şekilde, gerçek öğenin sınıfı yerine kontrol ediyorlar.
NSLog(@"Is of type: %@", [element class]);
iOS 7'de çalışacak
Bir superClass ve inheritedClass arasında ayrım yapmak istediğinizde şunları kullanabilirsiniz:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
Kullanılması - (BOOL)isKindOfClass:(Class)aClass
inheritedClass da üst sınıf bir tür olduğu için bu durumda DOĞRU hem zamanları anlamına gelir.
isMemberOfClass:
NO
alt sınıflarla uğraşırken geri dönecektir .
Basit bir test yaparak neyin işe yarayıp neyin yaramadığını belgelediğimi düşündüm. Genellikle nesnenin sınıfının diğer sınıfın üyesi olup olmadığını veya diğer sınıfa eşit olup olmadığını kontrol eden insanlar görürüm.
Aşağıdaki satır için, bir NSArray
, bir NSDictionary
veya olabilen zayıf biçimlendirilmiş verilerimiz var (null)
.
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
Bunlar yapılan testlerdir:
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
ama çok iyi çalıştı isMemberOfClass
.
[object isKindOfClass:[ClassName class]]