[英]How do I test which class an object is in Objective-C?
如何在Objective-C中測試對象是否是特定類的實例? 假設我想看看對象a是b類的實例,還是類c,我該怎么做呢?
要測試object是否是類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]);
或來自objective-c運行時api的c函數:
#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
}
你也可以使用
NSString *className = [[myObject class] description];
在任何NSObject上
Apple文檔中isKindOfClass的含義是什么?
在類集群表示的對象上使用此方法時要小心。 由於類集群的性質,您獲得的對象可能並不總是您期望的類型。 如果調用返回類集群的方法,則該方法返回的確切類型是您可以對該對象執行的操作的最佳指示。 例如,如果方法返回指向NSArray對象的指針,則不應使用此方法來查看該數組是否可變,如以下代碼所示:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
如果在代碼中使用此類構造,您可能認為修改實際上不應修改的對象是可以的。 這樣做可能會為期望對象保持不變的其他代碼產生問題。
如果您想檢查特定的課程,那么您可以使用
if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}
如果你想獲得班級的名稱,只需致電: -
id yourObject= [AnotherClass returningObject];
NSString *className=[yourObject className];
NSLog(@"Class name is : %@",className);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.