我的问题主要是关于如何解释 typedef 枚举,但这里是背景:
我正在使用 MailCore2,我试图弄清楚如何从我正在获取的单个电子邮件对象中读取标志。
我获取的每封 MCOIMAPMessage *电子邮件都有一个名为“标志”的属性。Flags 是 MCOMessageFlag 类型。当我查找 MCOMessageFlag 的定义时,我发现它是一个 typedef 枚举:
typedef enum {
MCOMessageFlagNone = 0,
/** Seen/Read flag.*/
MCOMessageFlagSeen = 1 << 0,
/** Replied/Answered flag.*/
MCOMessageFlagAnswered = 1 << 1,
/** Flagged/Starred flag.*/
MCOMessageFlagFlagged = 1 << 2,
/** Deleted flag.*/
MCOMessageFlagDeleted = 1 << 3,
/** Draft flag.*/
MCOMessageFlagDraft = 1 << 4,
/** $MDNSent flag.*/
MCOMessageFlagMDNSent = 1 << 5,
/** $Forwarded flag.*/
MCOMessageFlagForwarded = 1 << 6,
/** $SubmitPending flag.*/
MCOMessageFlagSubmitPending = 1 << 7,
/** $Submitted flag.*/
MCOMessageFlagSubmitted = 1 << 8,
} MCOMessageFlag;
由于我不知道 typedef 枚举是如何真正工作的——尤其是这个带有 '= 1 << 8' 类型组件的枚举,我对如何阅读电子邮件的标志属性有点迷茫。
例如,我有一封在服务器上同时具有 MCOMessageFlagSeen 和 MCOMessageFlagFlagged 的电子邮件。我想从 email.flags 属性中找出获取的电子邮件是否有一个、两个或没有这些标志(如果可能的话)。但是,在调试器中,当我为具有上述两个标志的电子邮件打印“email.flags”时,我只返回数字 5。我看不出这与上面的 typedef 枚举定义有何关系。
最终,我想根据标志是否存在设置一个 BOOL 值。换句话说,我想做类似的事情:
BOOL wasSeen = email.flags == MCOMessageFlagSeen;
BOOL isFlagged = email.flags == MCOMessageFlagFlagged;
当然这是行不通的,但这就是想法。谁能建议我如何完成这个和/或如何理解 typedef 枚举?