20

私は次のtypedefを実装しようとしています

typedef NS_OPTIONS (NSInteger, MyCellCorners) {
    MyCellCornerTopLeft,
    MyCellCornerTopRight,
    MyCellCornerBottomLeft,
    MyCellCornerBottomRight,
};

で値を正しく割り当てます

MyCellCorners cellCorners = (MyCellCornerTopLeft | MyCellCornerTopRight);

セルを描画するときに、正しく描画できるように、どのオプションが一致するかを確認するにはどうすればよいですか。

4

3 に答える 3

53

ビットマスキングを使用する:

typedef NS_OPTIONS (NSInteger, MyCellCorners) {
    MyCellCornerTopLeft = 1 << 0,
    MyCellCornerTopRight = 1 << 1,
    MyCellCornerBottomLeft = 1 << 2,
    MyCellCornerBottomRight = 1 << 3,
};

MyCellCorners cellCorners = MyCellCornerTopLeft | MyCellCornerTopRight;

if (cellCorners & MyCellCornerTopLeft) {
    // top left corner set
}

if (etc...) {

}
于 2012-12-11T06:21:59.077 に答える
26

この値をチェックする正しい方法は、最初に値をビット単位でANDしてから、必要な値と等しいかどうかをチェックすることです。

MyCellCorners cellCorners = MyCellCornerTopLeft | MyCellCornerTopRight;

if ((cellCorners & MyCellCornerTopLeft) == MyCellCornerTopLeft) {
    // top left corner set
}

次のリファレンスは、これが正しい理由を説明し、列挙型に関するその他の洞察を提供します。

参照:ビットマスク内の値のチェック

于 2015-04-27T00:43:43.283 に答える
1

NSWillに同意します。私は最近、間違った比較で同様の問題を抱えていました。

正しいifステートメントは次のようになります。

if ((cellCorners & MyCellCornerTopLeft) == MyCellCornerTopLeft){
于 2015-11-13T11:31:52.770 に答える