Saya perlu menguji apakah objeknya bertipe NSString
atau UIImageView
. Bagaimana saya bisa mencapai ini? Apakah ada beberapa jenis metode "isoftype"?
ios
objective-c
James Skidmore
sumber
sumber
[object isKindOfClass:[ClassName class]]
Jawaban:
Jika objek Anda adalah
myObject
, dan Anda ingin menguji untuk melihat apakah itu adalahNSString
, kodenya adalah:Demikian juga, jika Anda ingin menguji
myObject
untukUIImageView
:sumber
Anda mungkin akan menggunakan
Ini adalah metode
NSObject
.Untuk info lebih lanjut, periksa
NSObject
dokumentasi.Ini adalah bagaimana Anda menggunakan ini.
Anda mungkin juga mencoba melakukan hal seperti ini
sumber
className
, mungkin atau tidak bisa berfungsi pada OS X, tapi tidak di iOS dan itu tidak dimaksudkan untuk digunakan untuk ini. Juga, merekaNSLog
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 7Saat Anda ingin membedakan antara kelas super dan kelas bawaan, Anda dapat menggunakan:
Penggunaan
- (BOOL)isKindOfClass:(Class)aClass
dalam kasus ini akan menghasilkan TRUE dua kali karena inheritClass juga merupakan jenis superClass.sumber
isMemberOfClass:
akan kembaliNO
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)
.Ini adalah tes yang dilakukan:
isKindOfClass
bekerja lebih baik sementaraisMemberOfClass
tidak.sumber
Anda dapat menggunakan kode berikut jika Anda ingin memeriksa tipe tipe data primitif.
sumber
Sederhana, [kelas objek] akan mengembalikan nama kelas objek Anda.
sumber
Class
objek. Namun,description
objek ini akan menjadi nama kelas sebagai string, sehingga Anda masih dapat mencatatnya di konsol.