NS_ENUM 作为协议中的 属性
NS_ENUM as property in protocol
我遇到了奇怪的行为。我曾经有:
@property (nonatomic) ApplicationState applicationState;
直接在我的应用程序中 class。现在它被提取到协议
@protocol ApplicationProtocol <NSObject>
@property (nonatomic) ApplicationState applicationState;
ApplicationState 是枚举
typedef NS_ENUM(NSUInteger, ApplicationState)
{
ApplicationStateNormal = 0,
ApplicationStateExpanded = 1,
ApplicationStateMaximized = 2
};
现在。它曾经有效。现在这样的行:
self.applicationState = ApplicationStateMaximized;
从实施中调用 class 不会产生任何效果。
更新
Agy, rickster你们都是对的。我忘了添加到这个问题记录中,我已经在实现 class 中综合了属性。我没有注意到的是,我的同事添加了 getter,它总是返回相同的值(不幸的是 IDE 直到我在我的 class 中复制 属性 才显示此访问器)
在协议中声明 @property
不会为采用该协议的 属性 中的 属性 合成存储或访问器。为此,您需要这样的东西:
@implementation Application
@synthesize applicationState = _applicationState;
您需要合成 属性:
@implementation Application
@synthesize applicationState = _ applicationState;
@end
或再次声明属性:
@interface Application : NSObject <ApplicationProtocol>
@property (nonatomic) ApplicationState applicationState;
@end
我遇到了奇怪的行为。我曾经有:
@property (nonatomic) ApplicationState applicationState;
直接在我的应用程序中 class。现在它被提取到协议
@protocol ApplicationProtocol <NSObject>
@property (nonatomic) ApplicationState applicationState;
ApplicationState 是枚举
typedef NS_ENUM(NSUInteger, ApplicationState)
{
ApplicationStateNormal = 0,
ApplicationStateExpanded = 1,
ApplicationStateMaximized = 2
};
现在。它曾经有效。现在这样的行:
self.applicationState = ApplicationStateMaximized;
从实施中调用 class 不会产生任何效果。
更新
Agy, rickster你们都是对的。我忘了添加到这个问题记录中,我已经在实现 class 中综合了属性。我没有注意到的是,我的同事添加了 getter,它总是返回相同的值(不幸的是 IDE 直到我在我的 class 中复制 属性 才显示此访问器)
在协议中声明 @property
不会为采用该协议的 属性 中的 属性 合成存储或访问器。为此,您需要这样的东西:
@implementation Application
@synthesize applicationState = _applicationState;
您需要合成 属性:
@implementation Application
@synthesize applicationState = _ applicationState;
@end
或再次声明属性:
@interface Application : NSObject <ApplicationProtocol>
@property (nonatomic) ApplicationState applicationState;
@end