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