我有一个班级:
@interface BasicDescription : NSObject
@property (strong,nonatomic) NSString *author;
@property (assign,nonatomic) NSInteger year;
@property (strong,nonatomic) NSString *owner;
第二节课:
@interface AdvDescModel : BasicDescription
-(id)initWithBasicModel:(BasicDescription*)basicModel;
所以我的问题是当我创建新对象时如何分配所有属性。现在我有了
AdvDescModel *adv = [AdvDescModel alloc] initWithBasicModel:basic];
然后在初始化程序中:
-(id)initWithBasicModel:(BasicDescription*)basicModel {
if(self = [super init]) {
[self setAllParams:basicModel];
}
return self;
}
-(void)setAllParams:(BasicDescription*)bModel {
[self setAuthor:bModel.author];
[self setYear:bModel.year];
[self setOwner:bModel.owner];
}
但是没有更好的方法可以做到这一点?现在我必须观察我的所有属性并为每个属性调用setter。
答案 0 :(得分:4)
初始化对象的方式也不错,如果它满足您的要求,您可以这样离开...但是请看一下Builder Pattern这种情况下最好的选择。
答案 1 :(得分:0)
假设您有许多这样的属性,更好的方法是使用包含所有默认值的可变字典,并在每个新对象上设置它。然后,您可以修改子类或用户想要更改的值。
答案 2 :(得分:0)
我认为让一个类负责自己的属性是更好的做法,所以我建议AdvDescModel
有一个初始化程序,如...
-(id)initWithBasicModel:(BasicDescription*)basicModel {
if(self = [super initWithBasicModel:basicModel]) {
; // Anything specific to the subclass
}
return self;
}
......父母有:
-(id)initWithBasicModel:(BasicDescription*)bModel {
if(self = [super init]) {
[self setAuthor:bModel.author];
[self setYear:bModel.year];
[self setOwner:bModel.owner];
}
return self;
}