我们假设ParentClass
有一个名为a
的字符串属性:
@property (nonatomic, strong) NSString *a;
在子类ChildClass
中,我希望属性b
成为super.a
的别名。含义b
本身并没有任何价值,只是指向a
。
如果a
的值发生变化,则应该反映在b
中,反之亦然。
在Objective-C中实现这一目标的最简洁方法是什么。
答案 0 :(得分:0)
你不能这样做别名。但是,属性只是方法实现的简写。子类继承其超类的(可见)属性,因此您可以执行以下操作:
- (void)setB:(NSString *)b {
self.a = b;
}
- (NSString *)b {
return self.a;
}
如果子类不可见a
,则必须执行以下操作:
- (void)setB:(NSString *)b {
[self setValue:b forKey:@"a"];
}
- (NSString *)b {
return [self valueForKey:@"a"];
}
这是有效的,因为在运行时没有类型检查,所以如果属性存在(使用getter和setter的标准名称),你仍然可以使用KVC来操作它。