在Objective-C中进行子类化时更改变量的类

时间:2010-12-30 12:15:34

标签: objective-c cocoa ios

我有一个名为'PostView'的简单类,它是UIView的子类。在该类中,我在实现中定义了一个'item',它是'Post'的实例。

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

这对我来说很好,但是当我将它子类化时会出现问题:'PostPhotoView'。 'item'变量现在需要是一个'PostPhoto'实例,但是我不知道如何在不在每个子类中定义'item'的情况下这样做,这听起来有点重复和脏......

理想情况下我想这样做:

@interface PostPhotoView : PostView {
  PostPhoto *item;
}

但显然我无法重新定义变量。也许我会以错误的方式解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:4)

有两种方法可以解决这个问题:

  • 您可以访问ivar / property:PostPhoto *theItem = (PostPhoto *)self.item
  • 将ivar(或访问者的返回类型)声明为id类型,这样您就可以执行PostPhoto *theItem = self.item。为了完整起见,如果您使用类型为id的声明属性,则可能还需要检查setter中的值:NSParameterAssert([theItem isKindOfClass:[Post class]])