2017-10-08 4 views
0

私はObjective-Cの中のコードのこの種を持っている、と私はビットごとの対処方法の見当がつかないスウィフトのObjective-CスウィフトとビットごとのXOR等しい演算子^ =

+ (BOOL)isLocationOutOfChina:(CLLocationCoordinate2D)location { 
    BOOL oddFlag = NO; 
    oddFlag ^= (a.x + 
        (c.y - a.y)/
        (b.y - a.y) * 
        (b.x - a.x) < 
        point.x); 
    return !oddFlag; 
} 

に変換したいですスウィフト、^

Binary operator ^= cannot be applied to two 'Bool' operands

+0

Swiftで '^ ='を使用しようとしましたか?試して何が起こるか見てみましょう。 – rmaddy

+0

[演算子宣言](https://developer.apple.com/documentation/swift/operator_declarations)を参照してください – rmaddy

+0

@rmaddyエラーが発生しました:2項演算子 '^ ='は2つの 'Bool'オペランドに適用できません –

答えて

2

:私は、この変換のためのエラーを持って迅速^=

にXOR等しい演算子演算子(したがって、^=演算子)は、整数データ型(たとえば、Int)でのみ動作します。 Boolでは動作しません。

Objective-Cコードに^=を使用することは意味がないことに注意してください。あなたはいつもNOで始まり、XORはYESまたはNOのいずれかで始まります。結果は常に右側の値になります。つまり、NO^Xは常にXになります。したがって、以下のようにします。

BOOL oddFlag = (a.x + ...); 

Objective-Cその後、スウィフトの翻訳は簡単です。

+0

それは動作します、ありがとうございます。 –

+0

@ AminNegm-Awad実際には、「NO^X」は常に「X」であることを意味しました。 – rmaddy