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?


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.


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]];

18

Dari dalam kelas itu sendiri

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

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.


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


1

OBJC:

NSStringFromClass([instance class])

CEPAT

Dari contoh:

String(describing: YourType.self)

Dari tipe:

String(describing: self)

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)
}

atau hanyaself.dynamicType
jbg
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.