Saya memiliki objek (UIViewController) yang mungkin atau mungkin tidak sesuai dengan protokol yang saya tetapkan.
Saya tahu saya dapat menentukan apakah objek tersebut sesuai dengan protokol, kemudian dengan aman memanggil metode tersebut:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
Namun, XCode menunjukkan peringatan:
warning 'UIViewController' may not respond to '-protocolMethod'
Apa cara yang benar untuk mencegah peringatan ini? Sepertinya saya tidak bisa berperan self.myViewController
sebagai MyProtocol
kelas.
sumber
id<MyProtocol> p = (id<MyProtocol>)self.myViewController;
Jawaban ini dan @andys keduanya benar, tetapi jawabannya lebih benar.UIViewController
kevc
dalam contoh di jawaban saya, dan itu dinyatakan sebagaiid <MyProtocol>
?id
merupakan masalah: gist.github.com/nsforge/7743616Anda dapat mentransmisikannya seperti ini:
Hal ini membuat saya sedikit terkejut juga. Di Objective-C, protokol bukanlah tipe itu sendiri, jadi Anda perlu menentukan
id
(atau tipe lain, sepertiNSObject
) bersama dengan protokol yang Anda inginkan.sumber
(id)
berfungsi juga. Apakah itu bentuk yang buruk?