Pytanie Prywatnie wdrażanie protokołu? [duplikować]


Możliwe duplikaty:
Protokół zgodny prywatnie 

Klasa mojej próbuje zarejestrować się jako delegat do obiektu NSXMLParser, który tworzy. Jednak nie sądzę, żebym chciał, aby moja klasa publicznie ujawniła, że ​​implementuje protokół NSXMLParserDelegate, ponieważ obiekt NSXMLParser jest prywatną zmienną używaną tylko z klasy.

Czy mam prawo unikać podawania protokołu, a jeśli tak, to w jaki sposób mogę wdrożyć protokół bez upubliczniania tego, co robi klasa?


10
2017-12-19 06:13


pochodzenie




Odpowiedzi:


Spróbuj umieścić to w swoim pliku .m:

@interface MyClass (Private) <NSXMLParser>
@end

Nazwa konkretnej kategorii (Private) nie ma znaczenia - w rzeczywistości można użyć pustego zestawu nawiasów (patrz poniżej) - ale myślę, że to powinno wymagać implementacji wymaganych metod i poinformowania kompilatora, że ​​twoja klasa implementuje protokół, przynajmniej w tym pliku.

Jeśli to nie zadziała, spróbuj po prostu usunąć <NSXMLParser> z pliku .h i rzutowania self do id<NSXMLParser> jeśli to konieczne, podczas ustawiania delegata analizatora składni.


14
2017-12-19 06:26



Po napisaniu tego posta zauważyłem w "Powiązanym", że ktoś już znalazł rozwiązanie. Sugerują utworzenie anonimowej kategorii w pliku .m; @interface MyClass()<NSXMLParser>. Jeśli usuniesz Privatelub wspomnieć, że anonimowa kategoria działa, ale przyjmę twój post jako odpowiedź. :) +1 za pomysł id<NSXMLParser> bez względu :) - Mr. Smith
Dodałem notatkę. Dlaczego nie wysłać linku do tej odpowiedzi? - paulmelnikow
stackoverflow.com/questions/3813316/...  Zastanawiam się, czy powinienem oznaczyć mój post jako duplikat. Nie wiem, jak to zrobić. - Mr. Smith