我有许多 UIViewController
子类,我希望它们共享相同的属性,称为session
处理“已登录”状态。
我知道我可以使用父类,但这非常明确,所以我想知道是否可以session
通过共享协议“强制”该属性。
我从未见过在协议中定义的显式属性(显然您可以定义 setter 和 getter),那么在协议中定义属性是一种可取的模式吗?
我有许多 UIViewController
子类,我希望它们共享相同的属性,称为session
处理“已登录”状态。
我知道我可以使用父类,但这非常明确,所以我想知道是否可以session
通过共享协议“强制”该属性。
我从未见过在协议中定义的显式属性(显然您可以定义 setter 和 getter),那么在协议中定义属性是一种可取的模式吗?
@property
也可以出现在协议或类别的声明中。
在苹果官方文档中说明。所以那里没有问题。
是的,使用协议可以添加属性:
@protocol MyProtocol <NSObject>
@property (nonatomic, retain) NSFoobar *baz;
@end
并且@synthesize baz;
在每个采用此协议的类中(或者您可以使用@optional
关键字将声明的属性标记为可选)。
您可以在协议中拥有属性,前提是每个符合您的协议的类都有对应@synthesize
的属性,或者提供 getter 和 setter。
在 .h 文件中:
@property(nonatomic,strong)UILabel *mylabel;
在 .m 文件中:
@synthesize mylabel = _mylabel;
编译器将为 mylabel 创建 getter 和 setter。
Ex ->
-(void)setMylabe:(UILabel *) mylabel { //setter
}
-(UIlabel*)mylabel { // getter
}