2016-11-26 4 views
2

2つ以上のフラグを結合するときは、|を使用します。 Swiftを除いて、配列構文を使用するように変更しました。それらが列挙されているObjective Cは|の代わりに+を使用しましたか?ビットを組み合わせる?

requestAuthorizationWithOptions: (UNAuthorizationOptionAlert + UNAuthorizationOptionSound) 

:しかし、今、私はこれを行うローカル通知のいくつかのドキュメントを見つめています。 +演算子が突然この方法で作業を開始した場所を見つけることができません。私は、代わりに使用することはできませんでした。列挙型自体がちょうどビットの性質と追加方法によって動作する可能性がありますが、私は最後のステートメントを疑っています。

+1

「ちょうどビットパターンです」という意味で(フラグ自体がビットマスクなので)、ここで期待していることをプラスしないのはなぜですか?しかし、それは確かに非正統です。 – CodaFi

+8

もしそれらがユニークなビットフラッグであれば、加算はそれらに等しい。しかし、その状況でのみ。 –

+3

@CodaFiビットマスクを追加することは、いずれの値にも共通ビットが設定されていない場合にのみ機能します。追加を使用することは危険であり、変更される可能性のある非常に特殊な条件下でのみ機能するため、悪い考えです。 – rmaddy

答えて

3

したがって、上のコメントで議論を成文化するには、いいえ、+|の代わりではありません。 abに重複ビットを共有しないビットパターンがある場合に限り、a + b == a | bが生成されます。オプションenumの場合は、(オプションをこのように表現すると便利なので)これはしばしば真ですが、保証されません。これはあなたが上記の場合に当てはまりますが、良いコードはbitwiseまたはを使って少し明示的(かつ判読可能)になります。

+2

'+'を避ける別のケースは、 'UNAuthorizationOptionAlert'のようなオプションの実際の値が不明なので、' + 'がいつも動作するとは思えません。 iOSのあるバージョンでは動作し、その後のバージョンでは動作しない可能性があります。 – rmaddy

+0

うん。 Appleはすべての法律を書き直し続けているので、もしAppleが同じように迅速にObj Cのためにそれをやったのかどうか分からなかったのであろうか、文書やチュートリアルの作家が怠惰、愚かさ、彼らは実際に数学を知っていて、そこに投げ込んでしまいました。なぜなら、私はuber-leetスタイルのコード、物を遅くする依存関係を混乱させたり使用したりするワンライナーが嫌いです。回答ありがとうございます! –

関連する問題