2009-06-25 50 views
4

當我向NSLog發送一個對象時,我得到一個包含三個屬性的字符串。首先是對象的類,其次是對象的框架,第三是對象的CALayer。第二個和第三個屬性的標題是(例如layer =),所以我可以通過標題調用它們(例如myObject.layer)。第一個不是。我如何測試類的類型?類類型的測試

謝謝!

回答

10

要獲得對象的類,只需致電[myObject class]即可。可以按如下方式比較這對所需類:

if ([myObject class] == [SomeClass class]) { /* ... */ } 
if ([myObject class] == [NSString class]) { /* ... */ } 

如果你只是在尋找類的字符串名字,你可以使用NSStringFromClass功能如下:

NSString * className = NSStringFromClass([myObject class]); 
+0

非常感謝。這正是我需要的。 – 2009-06-25 14:07:18

+0

不客氣:) – 2009-06-25 14:19:09

7

如果您還要包括的目標類的子類使用:

[object isKindOfClass:[SomeClass class]] 
3

@eJames@Diederik都是正確的。然而,還有其他一些選擇,其中一些可能會更好,這取決於你的口味。

例如,您可以使用排除子類的-isMemberOfClass:而不是測試類對象的相等性,而-isKindOfClass:-isSubclassOfClass:則不使用子類。 (這絕對是其中一個選擇可能是對某些人比其他人更直觀的例子。)

此外,[SomeClass className][anObject className]方便,更短的方式來獲取類名稱作爲NSString。 (我知道-className是在NSObject上定義的,而+className適用於類原型,儘管我找不到它的文檔。)