我有一个设置,其中我有一个视图类型的层次结构和模型类型的等效层次结构。设置如下:
节点模型/数据:
@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
;