2010-02-07 118 views
116

我遇到以下問題:我得到一個傳遞類的實例,並且想知道此實例的類的名稱。如何得到這個?從實例獲取類的名稱

+0

也許用你的問題重寫或接受與問題相符的答案? – 2013-11-07 12:33:36

+0

@JasperBlues:完成,甚至沒有意識到這有多受歡迎! – Robin 2013-11-07 16:05:42

回答

336

NSStringFromClass([instance class])應該做的伎倆。

+28

Upvoted回答問題,以便Google員工可以得到答案,而不是預期需要。 – Gleno 2013-08-03 18:41:32

+2

記得'#import '能夠在實例上調用類。 – Raspu 2015-03-11 08:04:31

26

,如果你想要做的是測試一個對象,看它是否是一個類型某一類

BOOL test = [self isKindOfClass:[SomeClass class]]; 
+0

謝謝,我會用這個:) – Robin 2010-02-07 17:55:13

+8

Upvoted預測的需要,而不僅僅是回答這個問題。 – 2010-02-07 23:03:21

15

從類本身

-(NSString *) className 
{ 
    return NSStringFromClass([self class]); 
} 
+1

絕對不想引起你的憤怒,但這是你的個人資料中與iOS相關的第二個答案。在我看來,只是補充說我們可以在實現中將一個實例稱爲「自我」。你會捍衛這一點,因爲這大大增加了三年前接受的答案嗎? – danh 2014-09-17 21:49:50

+0

@danh我看到你在追捕我。對你有好處! – 2014-09-17 22:03:25

+0

對不起,我只是點了這個,並且爭論是否要說什麼。只是想做一些溫柔的羅紋,但我知道在這些半露面的環境下,脾氣會很快變熱。感謝你對這件事態度很好。 (實際上,+1用於練習封裝)。 – danh 2014-09-17 22:07:22

0

內如果你正在尋找如何獲取類名在Swift中,您可以使用反射來獲取有關對象的信息。

let tokens = split(reflect(self).summary, { $0 == "." }) 
if let typeName = tokens.last { 
    println(typeName) 
} 
+0

或只是'self.dynamicType' – jbg 2016-01-03 21:08:54

1

您還可以使用[[self class] description]

2

只需添加一個類別:

NSObject+Extensions.h 
- (NSString *)className; 

NSObject+Extensions.m 
- (NSString *)className { 
    return NSStringFromClass(self.class); 
} 

然後使用下面的代碼:

NSString *className = [[SomeObject new] className]; 

甚至:

NSString *className = SomeObject.new.className; 

要在任何位置使用,請將該類別添加到YourProject.pch文件中。

+0

如果調用Swift類,這將返回一個名稱空間類名。 – Alper 2017-11-14 12:51:21