Python head, tail и обратное чтение по строкам текстового файла

Сценарий
У меня есть ситуация, когда базовый класс с именем AbstractRequest имеет свойство делегата типа id , объявленное в файле заголовка:

@property (nonatomic, assign) id <AbstractRequestDelegate> delegate;

Протокол абстрактного делегата содержит несколько требуемых методов и, как указано в слово «абстрактный», и AbstractRequest , и AbstractRequestDelegate предназначены для подклассов / расширений.

Одним из примеров этого может быть подкласс ConcreteRequest и расширенный протокол ConcreteRequestDelegates, которые оба добавляют дополнительные методы к абстрактным. Предполагается, что как абстрактный, так и конкретный методы класса могут отправлять сообщения единственному назначенному экземпляру делегата.

В определенный момент времени ConcreteRequest хотел бы вызвать метод делегата, который определен ConcreteRequestDelegate. Поскольку тип делегата - id, компилятор выдаст предупреждение о том, что этот метод может быть не реализован.

ConcreteRequest.m: 38: warning: свойство "делегат" требует метода '-делегат' будет определен - используйте @synthesize, @dynamic или предоставить реализация метода

Проблема
Это предупреждение обосновано, поскольку свойство все-таки набрано на id . Чтобы исправить это, я хочу прояснить компилятору, что делегат, назначенный конкретному экземпляру, должен иметь тип id . Мне это показалось вполне разумным, поэтому я добавил новое свойство в заголовок ConcreteRequest, надеясь переопределить абстрактное:

@property (nonatomic, assign) id <ConcreteRequestDelegate> delegate;

Но именно здесь компилятор не согласен со мной, вероятно, не без оснований. Я бы подумал, что это выдаст предупреждение за переопределение свойства суперкласса неправильным типом, но вместо этого он просто требует, чтобы я повторно синтезировал это новое свойство. Я не хочу туда идти, потому что тогда победили методы суперкласса t иметь доступ к тому же свойству делегата.

Вопрос
Есть ли способ «повторно объявить» свойство в конкретном подклассе с добавленной информацией о типе? Или вы можете заметить ошибку в моем мышлении, возможно, это довольно распространенная проблема, с которой я просто не сталкивался до сих пор?

Ура,
EP.

PS Все имена классов и протоколов, фигурирующие в этой работе, являются вымышленными. Любое сходство с реальными именами классов и протоколов, открытых или запатентованных, является чисто случайным.

26
задан epologee 5 May 2011 в 10:17
поделиться