Objective-C - 如何使用NSInteger初始化枚举?

10

我正在开发一个应用程序,当我尝试使用NSCoding对具有枚举属性的模型进行编码时,遇到了问题。因此,我想将其转换为rawValue,再进行反向操作。我搜索了一下,找到了宏NS_ENUM,所以我的代码看起来像这样:

typedef NS_ENUM(NSInteger, SectionType) {
    SectionTypeText = 0,
    SectionTypeVideo = 1,
    SectionTypeLink = 2,
    SectionTypeFile = 3,
    SectionTypeQuiz = 4,
    SectionTypeAudio = 5,
    SectionTypeGame = 6,
    SectionTypeHomework = 7
};

但是我找不到任何可能的方法将它们转换为相关值,然后再进行反向操作。怎么办?有比NS_ENUM宏更好的方法吗?


1
你的问题不够清晰。如果问题与NSCoding有关,只需将其视为NSInteger属性进行编码/解码处理即可。 - Larme
1
它只是一个NSInteger,你不需要进行强制转换或其他操作,只需赋值SectionType s = 5;,然后判断s == SectionTypeAudio等等... - Grady Player
1
如果您需要它适用于NSKeyValueCoding,则可以将它们包装在NSNumbers中,如果喜欢的话,可以使用文字语法... [dict setObject:@(SectionTypeHomework) forKey:@"somekey"]... 如果您只是使用NSCoding,则该协议已经有过几次迭代。 - Grady Player
1个回答

15

我的Objective-C有点生疏,但我认为我只需要进行转换:

   SectionType type = (SectionType) 2;

后退功能相同:

   int typeNumber = type;

3
是的,它是自由兑换的,你甚至不需要施法。 - Grady Player
1
这就是它了。我确实记得它只是枚举基本类型的语法糖。 - Lucas van Dongen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接