我在 Objective-C 中有一个抽象接口,其中每个子类都需要设置一个属性,然后在init
. 我试图避免使用类似这样的重复代码:
接口文件
@interface Shape : NSObject
@property (nonatomic) PropertyType *prop;
- (id)init;
- (void)initProperty;
@end
实施文件
@implementation Shape
- (id)init
{
if(self = [super init]) {
[self initProperty];
[prop doSomething];
}
return self;
}
- (void)initProperty
{
}
@end
我的问题是每个子类都需要传递一组不同的参数initProperty
才能正确实现该方法:
@implementation Rectangle
- (void)initPropertyWithRect:(CGRect)rect
{
prop = [RectangleStuff rectangleWithRect:rect];
}
@end
@implementation Circle
- (void)initPropertyWithRadius:(CGFloat)radius
{
prop = [CircleStuff circleWithRadius:radius];
}
@end
有没有一种干净的方法来做我想要在 Objective-C 中做的事情?到目前为止,我的选择似乎是:
- 创建一个“财产包”,然后传递一个
NSDictionary
. - 复制
[property doSomething];
每个子类中的代码。 - 以某种方式将工厂对象传递给 init,并让工厂对象创建
prop
。这种方法似乎最干净,但我需要工厂对象以某种方式将矩形和/或半径保持为内部状态,这对我来说似乎并不干净。
有什么想法吗?