Saya perlu menguji apakah objeknya bertipe NSString
atau UIImageView
. Bagaimana saya bisa mencapai ini? Apakah ada beberapa jenis metode "isoftype"?
Saya perlu menguji apakah objeknya bertipe NSString
atau UIImageView
. Bagaimana saya bisa mencapai ini? Apakah ada beberapa jenis metode "isoftype"?
Jawaban:
Jika objek Anda adalah myObject
, dan Anda ingin menguji untuk melihat apakah itu adalah NSString
, kodenya adalah:
[myObject isKindOfClass:[NSString class]]
Demikian juga, jika Anda ingin menguji myObject
untuk UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Anda mungkin akan menggunakan
- (BOOL)isKindOfClass:(Class)aClass
Ini adalah metode NSObject
.
Untuk info lebih lanjut, periksa NSObject
dokumentasi.
Ini adalah bagaimana Anda menggunakan ini.
BOOL test = [self isKindOfClass:[SomeClass class]];
Anda mungkin juga mencoba melakukan hal seperti ini
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
, mungkin atau tidak bisa berfungsi pada OS X, tapi tidak di iOS dan itu tidak dimaksudkan untuk digunakan untuk ini. Juga, mereka NSLog
tidak melakukan apa yang saya pikir Anda maksudkan - mereka memeriksa nama kelas (selalu string) dan kelas coder, anehnya, bukan kelas elemen aktual.
NSLog(@"Is of type: %@", [element class]);
akan berfungsi di iOS 7
Saat Anda ingin membedakan antara kelas super dan kelas bawaan, Anda dapat menggunakan:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
Penggunaan - (BOOL)isKindOfClass:(Class)aClass
dalam kasus ini akan menghasilkan TRUE dua kali karena inheritClass juga merupakan jenis superClass.
isMemberOfClass:
akan kembali NO
ketika berhadapan dengan subclass.
Menjalankan tes sederhana, saya pikir saya akan mendokumentasikan apa yang berhasil dan yang tidak. Seringkali saya melihat orang memeriksa untuk melihat apakah kelas objek adalah anggota dari kelas lain atau sama dengan kelas lainnya.
Untuk baris di bawah ini, kami memiliki beberapa data yang terbentuk dengan buruk yang dapat berupa NSArray
,, NSDictionary
atau (null)
.
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
Ini adalah tes yang dilakukan:
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
bekerja lebih baik sementara isMemberOfClass
tidak.
[object isKindOfClass:[ClassName class]]