インスタンスからクラスの名前を取得する


142

次の問題があります。クラスのインスタンスが渡され、このインスタンスのクラスの名前を知りたいです。これを取得する方法?


おそらく、質問を書き直すか、質問に一致する回答を受け入れますか?
Jasper Blues

@JasperBlues:完了しました。これがどれほど人気が​​あるかさえわかりませんでした!
ロビン

回答:


396

NSStringFromClass([instance class]) トリックを行う必要があります。


33
グーグルが必要を予測する代わりに答えを得ることができるように質問に答えることに賛成です。
グレノ2013

2
#import <objc/objc-runtime.h>インスタンスのクラスを呼び出せることを忘れないでください。
JP Illanes 2015年

28

オブジェクトをテストして特定のクラスの型であるかどうかを確認するだけの場合

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

18

クラス自体から

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

2
絶対に怒りを煽りたくはありませんが、これはあなたのプロフィールで2番目のiOS関連の回答でした。実装内からインスタンスを「自己」として参照できることだけを追加したように思えます。これを、3歳の受け入れられた回答に大幅に追加すると弁護しますか?
danh 2014

@danh私があなたを追い詰めているのを見ます。よかったね!
カテドラルピロン2014

申し訳ありませんが、これをクリックして、何を言うかについて議論しました。穏やかなリブをしたかっただけですが、これらの半顔のない設定では、気性がかなり早く熱くなることを知っています。それについて善良であることに感謝します。(実際には、カプセル化を実践するための+1)。
danh 2014

2
これは問題を除いて何も答えに追加しません。
ニコライルーエ、2015

1
これをクラスメソッドにする必要があります
Bhumit Muchhadia 2017年

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ファイルにカテゴリを追加します。


Swiftクラスで呼び出された場合、これは名前空間付きのクラス名を返します。
アルパー、


1

OBJC:

NSStringFromClass([instance class])

迅速

インスタンスから:

String(describing: YourType.self)

タイプから:

String(describing: self)

0

Swiftでクラス名を取得する方法を探している場合は、reflectを使用してオブジェクトに関する情報を取得できます。

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

またはただself.dynamicType
jbg 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.