Objective-C @protokolü için bir sınıf örneği dökme
Olabilir ya da tanımlanmış bir Protokole uygun olmayan bir nesne (bir UİViewController) var.
Eğer nesne Protokole uygun olup olmadığını belirlemek, güvenli bir şekilde yöntemini çağırın biliyorum:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
Ancak, böyle büyük mükafat bir uyarı gösterir:
warning 'UIViewController' may not respond to '-protocolMethod'
Bu uyarı önlemek için doğru yolu nedir? MyProtocol a sınıfı self.myViewController dökme gibi görünmüyorum.
CEVAP
Bunu yapmak için doğru bir şekilde yapmak
if ([self.myViewController conformsToProtocol:@protocol(MyProtocol)])
{
UIViewController <MyProtocol> *vc = (UIViewController <MyProtocol> *) self.myViewController;
[vc protocolMethod];
}
UIViewController <MyProtocol> * tür atama için çeviren "vc bir UİViewController nesne uyan MyProtocol", oysa kullanarak id <MyProtocol> çevirir "vc bir nesnenin bilinmeyen bir sınıf uyan MyProtocol".
Bu şekilde derleyici size uygun tip kontrolü vc - derleyici sadece sana bir uyarı eğer herhangi bir yöntemi bu değil ilan ya UIViewController <MyProtocol> denir. id yalnızca nesnenin sınıf/tip dökme biliyor musun eğer bu durumlarda kullanılmalıdır.

Nasıl jenerik T türü bir sınıf örneği ...
Objective-C çalışma Zamanı: en iyi sın...
Statik sınıf örneği bir istek veya ASP...
Objective-C için bir arada kısayolları...
Koşullu bir sınıf uygulamak için en iy...