2010-12-30 1 views
0

У меня есть простой класс, называемый «PostView», который подклассифицирует UIView. Внутри этого класса я определил «элемент» в реализации, который является экземпляром «Post».Изменение класса переменной при подклассов в Objective-C

@interface PostView : UIView <UIScrollViewDelegate> { 
    Post *item; 
} 

Это работает отлично для меня, но проблема возникает, когда я подклассифицирую его: «PostPhotoView». Переменная «item» теперь должна быть экземпляром «PostPhoto», но я не уверен, как я могу это сделать, не определяя «элемент» в каждом подклассе, который звучит немного повторяющимся и грязным.

В идеале я хочу это сделать:

@interface PostPhotoView : PostView { 
    PostPhoto *item; 
} 

Но, очевидно, я не могу переопределить переменную. Может быть, я собираюсь сделать это неправильно?

Спасибо.

+0

PostPhoto означает класс PostPhotoView правильно? удалите экземпляр экземпляра из класса postView. Вы уже объявили элемент в postphotoView. – Raxit

+0

Нет, 'PostPhoto'. 'PostPhotoView' распространяется от' PostView'. 'PostPhoto' распространяется от' Post'. Все подклассы 'PostView' будут иметь элемент, и каждый элемент будет подкласса' Post'. – rdougan

ответ

3

Есть два способа решения этой:

  • приведение ваш доступ к Ивар/свойства: PostPhoto *theItem = (PostPhoto *)self.item
  • Объявите Ивар (или тип возвращаемого аксессору) в качестве типа id, так что вы возможно PostPhoto *theItem = self.item. Для полноты, если вы используете объявленное свойство типа id, вы также можете проверить значение в сеттере: NSParameterAssert([theItem isKindOfClass:[Post class]]).
Смежные вопросы