Mendapatkan nama kelas dari sebuah instance

142

Saya memiliki masalah berikut: Saya mendapatkan instance dari kelas yang dilewati dan ingin tahu nama kelas dari instance ini. Bagaimana cara mendapatkan ini?

Robin
sumber
Mungkin menulis ulang pertanyaan Anda atau menerima jawaban yang cocok dengan pertanyaan itu?
Jasper Blues
@JasperBlues: Selesai, bahkan tidak menyadari betapa populernya ini!
Robin

Jawaban:

396

NSStringFromClass([instance class]) harus melakukan trik.

CiNN
sumber
33
Terpilih untuk menjawab pertanyaan sehingga googler bisa mendapatkan jawaban, alih-alih mengantisipasi kebutuhan.
Gleno
2
Ingatlah untuk #import <objc/objc-runtime.h>dapat memanggil kelas secara instan.
JP Illanes
28

jika semua yang ingin Anda lakukan adalah menguji objek untuk melihat apakah itu jenis Kelas tertentu

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

Dari dalam kelas itu sendiri

-(NSString *) className
{
    return NSStringFromClass([self class]);
}
Katedral Pillon
sumber
2
Sama sekali tidak ingin membangkitkan kemarahan Anda, tetapi ini adalah jawaban terkait iOS kedua di profil Anda. Sepertinya saya menambahkan hanya bahwa kita dapat merujuk ke instance sebagai "diri" dari dalam implementasinya. Apakah Anda akan membela ini dengan menambahkan secara substansial jawaban yang diterima tiga tahun?
danh
@danh saya melihat Anda memburu saya. Bagus untukmu!
Katedral Pillon
Maaf, saya baru saja mengklik yang ini, dan berdebat tentang apakah akan mengatakan sesuatu. Hanya ingin melakukan sedikit gangguan, tetapi saya tahu bahwa emosi cepat panas di pengaturan semi-wajah ini. Terima kasih sudah baik hati tentang hal itu. (Bahkan, +1 untuk berlatih enkapsulasi).
danh
2
Ini tidak menambah apa pun selain jawabannya.
Nikolai Ruhe
1
Seharusnya menjadikan ini metode kelas
Bhumit Muchhadia
2

Cukup tambahkan kategori:

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

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

Kemudian gunakan kode berikut:

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

atau bahkan:

NSString *className = SomeObject.new.className;

Untuk menggunakannya di mana saja, tambahkan kategori ke file YourProject.pch.

ealee
sumber
Jika dipanggil pada kelas Swift, ini mengembalikan nama kelas namespaced.
Alper
1

Anda juga bisa menggunakan [[self class] description]

Jeremie D
sumber
1

OBJC:

NSStringFromClass([instance class])

CEPAT

Dari contoh:

String(describing: YourType.self)

Dari tipe:

String(describing: self)
Lal Krishna
sumber
0

Jika Anda mencari cara mendapatkan classname di Swift Anda dapat menggunakan refl untuk mendapatkan informasi tentang objek.

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