Bagaimana saya menguji apakah suatu objek adalah turunan dari kelas tertentu di Objective-C? Katakanlah saya ingin melihat apakah objek a adalah turunan dari kelas b, atau kelas c, bagaimana cara saya melakukannya?
Bagaimana saya menguji apakah suatu objek adalah turunan dari kelas tertentu di Objective-C? Katakanlah saya ingin melihat apakah objek a adalah turunan dari kelas b, atau kelas c, bagaimana cara saya melakukannya?
Jawaban:
Untuk menguji apakah objek adalah turunan dari kelas a:
[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of
// given class or an instance of any class that inherits from that class.
atau
[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a
// given class.
Untuk mendapatkan nama kelas objek, Anda dapat menggunakan NSStringFromClass
fungsi:
NSString *className = NSStringFromClass([yourObject class]);
atau c-function dari api runtime objektif-c:
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
EDIT: Dalam Swift
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
class_getName
lebih NSStringFromClass
? Jika tidak ada, jawaban ini harus disesuaikan.
Anda juga bisa menggunakannya
NSString *className = [[myObject class] description];
pada setiap NSObject
Apa artinya tentang isKindOfClass di Apple Documentation
Hati-hati saat menggunakan metode ini pada objek yang diwakili oleh gugus kelas. Karena sifat cluster kelas, objek yang Anda dapatkan kembali mungkin tidak selalu menjadi tipe yang Anda harapkan. Jika Anda memanggil metode yang mengembalikan cluster kelas, tipe yang tepat dikembalikan oleh metode adalah indikator terbaik dari apa yang dapat Anda lakukan dengan objek itu. Misalnya, jika metode mengembalikan pointer ke objek NSArray, Anda tidak boleh menggunakan metode ini untuk melihat apakah array bisa berubah, seperti yang ditunjukkan dalam kode berikut:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
Jika Anda menggunakan konstruksi seperti itu dalam kode Anda, Anda mungkin berpikir tidak apa-apa untuk memodifikasi objek yang pada kenyataannya tidak boleh dimodifikasi. Melakukan hal itu dapat menimbulkan masalah bagi kode lain yang mengharapkan objek tetap tidak berubah.
-isKindOfClass:
& -isMemberOfClass:
tidak boleh digunakan untuk mengidentifikasi objek dalam cluster kelas.
Jika Anda ingin memeriksa kelas tertentu maka Anda dapat menggunakannya
if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}
jika Anda ingin mendapatkan nama kelas cukup hubungi: -
id yourObject= [AnotherClass returningObject];
NSString *className=[yourObject className];
NSLog(@"Class name is : %@",className);