2010-12-30 15 views
0

私はUIViewをサブクラス化する 'PostView'と呼ばれる単純なクラスを定義しました。そのクラスの中で、私は実装の中で '項目'を定義しました。これは 'Post'のインスタンスです。Objective-Cでサブクラス化するときの変数のクラスを変更する

これは問題なく動作しますが、サブクラス化すると問題が発生します: 'PostPhotoView'。 'item'変数は 'PostPhoto'インスタンスにする必要がありますが、各サブクラスで 'item'を定義せずにこれをどうやってやり遂げることができるか分かりません。

理想的には、私はこれをしたい:

@interface PostPhotoView : PostView { 
    PostPhoto *item; 
} 

しかし、明らかに私は変数を再定義することはできません。たぶん私は間違った方法でこれについて行くつもりですか?

ありがとうございました。

+0

PostPhotoはPostPhotoViewクラスの権利を意味しますか? postViewクラスから項目インスタンスを削除します。 postphotoViewでitemを宣言しました。 – Raxit

+0

いいえ、 'PostPhoto'。 'PostPhotoView'は' PostView'から拡張しています。 'PostPhoto'は' Post'から拡張しています。 'PostView'のすべてのサブクラスは項目を持ち、各項目は' Post'をサブクラス化します。 – rdougan

答えて

3

これに対処するための2つの方法があります。IVAR /プロパティへのアクセスを型キャスト

  • PostPhoto *theItem = (PostPhoto *)self.item
  • はIVAR(またはアクセサの戻り型)を宣言タイプidとして、だからできますPostPhoto *theItem = self.item。完全性のために、型がidの宣言されたプロパティを使用している場合は、セッターの値を確認することもできます:NSParameterAssert([theItem isKindOfClass:[Post class]])
関連する問題