ฉันจะทดสอบว่าวัตถุเป็นตัวอย่างของคลาสเฉพาะใน Objective-C ได้อย่างไร สมมติว่าฉันต้องการดูว่าวัตถุ a เป็นตัวอย่างของคลาส b หรือคลาส c ฉันจะดำเนินการได้อย่างไร
ฉันจะทดสอบว่าวัตถุเป็นตัวอย่างของคลาสเฉพาะใน Objective-C ได้อย่างไร สมมติว่าฉันต้องการดูว่าวัตถุ a เป็นตัวอย่างของคลาส b หรือคลาส c ฉันจะดำเนินการได้อย่างไร
คำตอบ:
เพื่อทดสอบว่าวัตถุเป็นอินสแตนซ์ของคลาส 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.
หรือ
[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a
// given class.
ในการรับชื่อคลาสของวัตถุคุณสามารถใช้NSStringFromClass
ฟังก์ชัน:
NSString *className = NSStringFromClass([yourObject class]);
หรือ c-function จาก runtime-c runtime api:
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
แก้ไข: อย่างรวดเร็ว
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
class_getName
เกินNSStringFromClass
คืออะไร? หากไม่มีเลยคำตอบนี้ควรถูกปรับ
คุณยังสามารถใช้
NSString *className = [[myObject class] description];
ใน NSObject ใด ๆ
isKindOfClassใน Apple Documentation หมายถึงอะไร
ระวังเมื่อใช้วิธีนี้กับวัตถุที่เป็นตัวแทนของคลาสคลัสเตอร์ เนื่องจากลักษณะของคลาสกลุ่มวัตถุที่คุณได้รับอาจไม่ได้เป็นประเภทที่คุณคาดหวังเสมอไป ถ้าคุณเรียกใช้เมธอดที่ส่งคืนคลาสคลัสเตอร์ชนิดที่แน่นอนที่ส่งคืนโดยเมธอดเป็นตัวบ่งชี้ที่ดีที่สุดของสิ่งที่คุณสามารถทำได้กับวัตถุนั้น ตัวอย่างเช่นถ้าเมธอดส่งคืนพอยน์เตอร์ไปยังวัตถุ NSArray คุณไม่ควรใช้วิธีนี้เพื่อดูว่าอาร์เรย์ไม่แน่นอนหรือไม่ดังที่แสดงในรหัสต่อไปนี้:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
หากคุณใช้โครงสร้างดังกล่าวในรหัสของคุณคุณอาจคิดว่าเป็นเรื่องดีที่จะแก้ไขวัตถุที่จริงแล้วไม่ควรแก้ไข การทำเช่นนั้นอาจสร้างปัญหาสำหรับรหัสอื่นที่คาดว่าวัตถุจะยังคงไม่เปลี่ยนแปลง
-isKindOfClass:
และ-isMemberOfClass:
ไม่ควรนำมาใช้ในการระบุวัตถุภายในคลัสเตอร์ชั้นเรียน
หากคุณต้องการตรวจสอบคลาสเฉพาะคุณสามารถใช้
if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}
ถ้าคุณต้องการได้รับชื่อของคลาสเพียงโทร: -
id yourObject= [AnotherClass returningObject];
NSString *className=[yourObject className];
NSLog(@"Class name is : %@",className);
นอกจากนี้คุณยังสามารถตรวจสอบเวลาทำงาน ใส่เบรกพอยต์หนึ่งในรหัสและภายในคอนโซล (lldb) เขียน
(lldb) po [yourObject class]
แบบนี้..