Sınıf yöntemi-respondsToSelector eşdeğeri:
Sınıf yöntemi -respondsToSelector:
eşdeğer var mı?
respondsToSelector:
gibi bir şey mi?
Neden soruyorum, çünkü bir uygulama -respondsToSelector:
bir sınıf düzeyinde, bir derleyici uyarı: "'- respondsToSelector:' yerine ' respondsToSelector:' in protocol(s)".
Kod bu gibi görünüyor:
Class <SomeProtocol> someClass = [someInstance class];
if ([someClass respondsToSelector:@selector(someSelector:)]) {
someVar = [someClass someSelector:someData];
}
CEVAP
Düzenle gördükten sonra güncelleme:
Bir sınıf nesnesi, sizin de fark ettiğiniz gibi respondsToSelector:
çok iyi yanıt verir. Test uygulamasında, herhangi bir derleyici bir uyarı olmadan her birini yapabilirim:
NSLog(@"Responds to selector? %i", [MyObject respondsToSelector:@selector(respondsToSelector:)]);
NSLog(@"Responds to selector? %i", [[MyObject class] respondsToSelector:@selector(respondsToSelector:)]);
Ancak, değişken bir protokol beyan ettiniz, sınıfı uygular için bu yöntemleri işaret eden bir nesne olduğunu kabul eder. En basit çözüm respondsToSelector:
arama amaçlı id
someClass
dökme olacaktır. Biraz daha temiz bir çözüm respondsToSelector:(SEL)selector
, eder @protocol
kendi ilan etmek ve sonra da şöyle: someClass
ilan olurdu
Class<SomeProtocol, ClassRespondingToSelector> someClass = ...
Son olarak, emin http://bugreporter.apple.com Apple ile ilgili bir hata dosyası. Yaptığın şey çok açık o yüzden bu kadar basit bir test uygulaması vardır. Eğer onları düzeltmeleri öncelik yardımcı olur, geçmişte olduğu gibi teslim oldum bile, bu tür hata raporları bekliyoruz.
Son bir not: bu, teoride, bir kök nesne bu durumda NSObject, ve tamamen ayrı uygulamak için seçtiğiniz yüzünden oluyorolmaz-respondsToSelector:
yanıt. -[NSObject respondsToSelector:]
aslında NSObject
protokolde, sınıf tanımı bildirilmedi. NSObject
protokol NSObject
olarak bildiklerimizin çoğu aslında yaşadığı yeri aslında. respondsToSelector:
de orada olması gerektiğini iddia olabilir, ama şu anda değil. Ve protokol listesi verdik, ve bu yöntem orada olmadığına göre, sen ne yaptığını biliyor emin olmak için bir uyarı verir.
Python sınıf farklılıkları yöntemi: il...
Eğer örneği varsa görmek sınıf yöntemi...
'Eclipse içine bir proje aldıktan...
Orada herhangi bir şekilde C# uzantısı...
Java, nasıl bir temel sınıf'türet...