Mam obiekt (UIViewController), który może, ale nie musi, być zgodny z protokołem, który zdefiniowałem.
Wiem, że potrafię określić, czy obiekt jest zgodny z protokołem, a następnie bezpiecznie wywołaj metodę:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
Jednak XCode wyświetla ostrzeżenie:
warning 'UIViewController' may not respond to '-protocolMethod'
Jaki jest właściwy sposób uniknięcia tego ostrzeżenia? Wydaje się, że nie mogę obsadzić self.myViewController
w MyProtocol
klasie.
źródło
id<MyProtocol> p = (id<MyProtocol>)self.myViewController;
ta odpowiedź i @andys są poprawne, ale jego jest bardziej poprawne.UIViewController
sięvc
na przykład w mojej odpowiedzi, i to zadeklarowane jakoid <MyProtocol>
?id
jest problemem: gist.github.com/nsforge/7743616Możesz to rzucić w ten sposób:
To też trochę mnie zrzuciło. W Objective-C protokół nie jest samym typem, więc musisz określić
id
(lub inny typ, taki jakNSObject
) wraz z protokołem, który chcesz.źródło
(id)
działa. Czy to zła forma?