我只是想确保我对属性继承的理解是正确的。我目前正在尝试创建UIViewController的子类。在我的UIViewController中,所有我的出口等都在实现部分中声明如下:
@interface BaseClass()
@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;
@end
那么这些属性是私有的,对吗?现在,当我尝试使用我的getter和setter创建一个子类并访问这些属性时,我无法从我的子类访问它们。是否在我的子类中再次重新声明这些属性的正确形式'实施部分,像这样?
@interface SubClass()
@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;
@end
我想我可以这样做,但后来我觉得它破坏了继承的目的。什么是正确的方式/我做错了什么?
答案 0 :(得分:1)
我会在BaseClass
的公共接口中声明该属性 - 我认为没有理由将它们放在类扩展中。
@interface BaseClass : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;
@end
@interface SubClass : BaseClass
// No need to redeclare the property as you're inheriting it.
@end
<强> [编辑] 强>
如果您必须使用类扩展,那么您可以使用私有标头来实现相同的目的。
BaseClass(BaseClass.h)的公共标头
@interface BaseClass : UIViewController
@end
BaseClass的私有标头(BaseClass-Private.h)
@interface BaseClass ()
@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;
@end
SubClass(SubClass.h)的公共标头
#import "SubClass.h"
@interface SubClass : BaseClass
@end
SubClass(SubClass.m)的实现
#import "BaseClass-Private.h"
@implementation SubClass
@end