私の質問は主に typedef 列挙型をどのように解釈するかについてですが、背景は次のとおりです。
私は MailCore2 を使用しており、フェッチしている個々の電子メール オブジェクトからフラグを読み取る方法を見つけようとしています。
私が取得した各 MCOIMAPMessage * メールには、「フラグ」と呼ばれるプロパティがあります。フラグは 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列挙型を理解する方法を誰かが提案できますか?