更新: これはすべてワイルド ガチョウ チェイスでした。提案された回答に基づいて変更を加えた後、機能しました。しかし、しばらくしてから試してみると、再び機能しませんでした。私が気付いたのは、デバッガーの使い方がすべてだったということです。areSameColor 内にブレークポイントがありました。コードをステップ実行しているときに、areUniqueColors が実行されていないと想定しました。しかし、私は 2 番目の状態をまたいでいて、短絡していると思いました。最終的に、以下の両方のオプションで正しく評価されました。2 番目の例の方が読みやすいと思われるため、この例に固執することにしました。みんなの時間をありがとう。
次のifステートメントがどのように評価されているか混乱しています...
if(![self areSameColor:setCards] && ![self areUniqueColors:setCards]){
match = NO;
}
私のテストケースでは [self areSameColor:setCards] は NO と評価されます。2番目の条件を評価することを期待しています。デバッガーを見ると、TRUE の結果にショートカットしているようです。
私もこれで試しました:
if(!([self areSameColor:setCards] || [self areUniqueColors:setCards])){
match = NO;
}
どちらの場合も、2 番目の条件を評価していません。areSameColor と areUniqueColor は BOOL を返します。
私の予想評価は…
areSameColor | areUniqueColor | MATCH
NO | NO | match = NO
YES | NO | match UNCHANGED
NO | YES | match UNCHANGED
私はこれをどのように間違っていると考えていますか?