Sea*_*ser 2 objective-c subclassing ios
我有一个设置,我有一个视图类型的层次结构,具有等效的模型类型层次结构.设置如下:
节点模型/数据:
@interface GenericNode : NSObject
//blah blah blah
@end
@interface ShapeNode : GenericNode
//more blah
@end
Run Code Online (Sandbox Code Playgroud)
nodeViews,它将始终接收一个等效类型的节点作为其模型:
@interface GenericNodeView : UIView
@property (nonatomic, strong) GenericNode * model;
@end
@interface ShapeNodeView : GenericNodeView
@end
Run Code Online (Sandbox Code Playgroud)
但是,这里的问题是它的类型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;
}
Run Code Online (Sandbox Code Playgroud)
但是呼唤[exampleShapeNodeView myModel]仍然会返回GenericNode;
我刚刚对此进行了测试,它对我很有用:
在子类中,使用@property重新声明:
@interface GenericNodeView : UIView
@property (nonatomic, strong) GenericNode * model;
@end
@interface ShapeNodeView : GenericNodeView
@property (nonatomic, strong) ShapeNode * model;
@end
Run Code Online (Sandbox Code Playgroud)
你需要重新合成,但我的Xcode没有抱怨(4.3.3)
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |