モデルタイプの同等の階層を持つビュータイプの階層があるセットアップがあります。設定は次のとおりです。
ノードモデル/データ:
@interface GenericNode : NSObject
//blah blah blah
@end
@interface ShapeNode : GenericNode
//more blah
@end
nodeViewsは、常に同等の型のノードをモデルとして受け取ります。
@interface GenericNodeView : UIView
@property (nonatomic, strong) GenericNode * model;
@end
@interface ShapeNodeView : GenericNodeView
@end
ただし、ここでの問題は、のタイプmodel
が常に抽象スーパークラスとして保持されるため、サブクラスのプロパティのメソッドにアクセスするたびにそれをキャストする必要があることです。
exampleShapeNodeView.model
常になどのインスタンスを返すようにクラスプロパティを再キャストする方法はありますShapeNode
か?
次のようなカスタムアクセサメソッドを試しました
@interface GenericNodeView : UIView
@property (nonatomic, strong) GenericNode * model;
-(GenericNode *)myModel;
@end
@interface ShapeNodeView : GenericNodeView
-(ShapeNode *)myModel;
@end
//in genericNodeView implementation
-(GenericNode *)myModel{
return (GenericNode *) self.model;
}
//in shapeNodeView implementation
-(ShapeNode *)myModel{
return (ShapeNode *) self.model;
}
ただし、呼び出しても;[exampleShapeNodeView myModel]
が返されます。GenericNode