web-dev-qa-db-ja.com

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

次の問題があります。クラスのインスタンスが渡され、このインスタンスのクラスの名前を知りたいです。これを入手するには?

135
Robin

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

373
CiNN

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

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

クラス自体の中から

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

カテゴリを追加するだけです:

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ファイルに追加します。

2
ealee

[[self class] description]を使用することもできます

1
Jeremie

OBJC:

NSStringFromClass([instance class])

スイフト

インスタンスから:

String(describing: YourType.self)

タイプから:

String(describing: self)
1
Lal Krishna

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

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