Sınıfın adını bir örnekten alma


142

Aşağıdaki sorun var: Ben bir sınıf örneği geçti ve bu örnek sınıfının adını bilmek istiyorum. Bunu nasıl alabilirim?


Belki sorunuzu yeniden yazabilir veya soruyla eşleşen cevabı kabul edebilirsiniz?
Jasper Blues

@JasperBlues: Bitti, bunun ne kadar popüler olduğunu bile bilmiyordum!
Robin

Yanıtlar:


396

NSStringFromClass([instance class]) hile yapmalı.


33
Google çalışanlarının ihtiyacı tahmin etmek yerine bir yanıt alabilmeleri için soruyu cevapladıkları için seçildi.
Gleno

2
#import <objc/objc-runtime.h>Bir örnek üzerinde sınıf çağırabileceğinizi unutmayın .
JP Illanes

28

tüm yapmak istediğiniz bir nesneyi belirli bir Sınıf türü olup olmadığını görmek için test etmekse

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

18

Sınıfın içinden

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

2
Kesinlikle öfkenizi uyandırmak istemiyorum, ancak bu profilinizdeki iOS ile ilgili ikinci cevaptı. Bana öyle geliyor ki, sadece bir örneği, kendi uygulamasından “ben” olarak adlandırabiliriz. Bunu, üç yaşındaki kabul edilen cevaba önemli ölçüde ekleyerek savunur musunuz?
danh

@danh beni avladığını görüyorum. Aferin!
Katedral Pillon

Üzgünüm, bunu tıkladım ve bir şey söyleyip söylememeyi tartıştım. Sadece hafif bir kaburga yapmak istedim, ama biliyorum ki bu yarı yüzsüz ortamlarda tempers oldukça hızlı ısınıyor. İyi huylu olduğunuz için teşekkürler. (Aslında, kapsülleme pratiği için +1).
danh

2
Bu, cevaba sorun dışında hiçbir şey eklemez.
Nikolai Ruhe

1
Bunu bir sınıf yöntemi
yapmalı

2

Sadece bir kategori ekleyin:

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

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

Ardından aşağıdaki kodu kullanın:

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

ya da:

NSString *className = SomeObject.new.className;

Herhangi bir yerde kullanmak için kategoriyi YourProject.pch dosyasına ekleyin.


Swift sınıfında çağrılırsa, ad boşluklu bir sınıf adı döndürülür.
Alper


1

objc:

NSStringFromClass([instance class])

SWIFT

Örneğin:

String(describing: YourType.self)

Kimden türü:

String(describing: self)

0

Swift'te sınıf adını nasıl alacağınızı düşünüyorsanız, nesne hakkında bilgi almak için refl kullanabilirsiniz.

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

ya da sadeceself.dynamicType
jbg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.