恩纳姆与NSnumber

Zer*_*rho 4 c enums objective-c

如何创建包含NSNumber的枚举?我的应用程序中有一个coredata持久性,一个实体在coredata中声明为Integer 16的status属性,这意味着它是一个NSNumber

我希望能够声明我的枚举以包含NSNumber而不是int,所以我可以使用它们而不必编写这个可怕的东西

enum {
  ERROR,
  INCOMPLETE,
  OK
} EventStatus;

[myObjectOnCoredata setStatus: [[NSNumber alloc] initWithInt:INCOMPLETE]];
Run Code Online (Sandbox Code Playgroud)

而且只是:

[muObjectOnCoredata setStatus: INCOMPLETE];
Run Code Online (Sandbox Code Playgroud)

我认为这是可能的,因为我可以将枚举声明为NSInteger,但它对我来说仍然不好

谢谢你的帮助

JDS*_*JDS 18

从去年WWDC开始,您可以使用盒装表达式来创建NSNumbers:

@(INCOMPLETE) // Equals to [NSNumber numberWithInt:INCOMPLETE]
Run Code Online (Sandbox Code Playgroud)

另请参见此处:http://clang.llvm.org/docs/ObjectiveCLiterals.html
有一次它说它在任何Apple编译器中都不可用,但现在Clang是默认版本,它支持3.2版本

或者,在NSManagedObject的子类中添加一个方法enum EventStatus,创建一个数字并调用原始方法


Sul*_*han 12

将managedObject的状态命名为statusNumber.

然后

@dynamic statusNumber


- (void)setStatus:(EventStatus)status {
    self.statusNumber = [[NSNumber alloc] initWithInt:status]];
}

- (EventStatus)status {
    return [self.statusNumber intValue];
}
Run Code Online (Sandbox Code Playgroud)

只需将转化隐藏到您的实施中即可.