2017-10-08 1 views
0

ich diese Art von Code bekommen haben in Objective-C, und ich will SwiftObjective-C zu Swift bitweise XOR gleich Operator^=

+ (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; 
} 

Ich habe keine Ahnung von konvertieren, wie mit Bitwise umgehen XOR gleich Operator zu schnellen ^=

ich habe einen Fehler für diese convert bekam:

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

+0

Haben Sie versucht, '^ =' in Swift zu verwenden? Probieren Sie es aus und sehen Sie, was passiert. – rmaddy

+0

Siehe [Betreibererklärungen] (https://developer.apple.com/documentation/swift/operator_declarations) – rmaddy

+0

@rmaddy Ich habe einen Fehler: Binärer Operator '^ =' kann nicht auf zwei 'Bool'-Operanden angewendet werden –

Antwort

2

In Swift, die ^ Operator (und daher der ^=-Operator) funktioniert nur mit Integer-Datentypen (wie Int). Es funktioniert nicht mit Bool.

Aber beachten Sie, dass Ihre Verwendung von ^= in Ihrem Objective-C-Code sinnlos ist. Sie beginnen immer mit NO und XOR dann mit entweder YES oder NO. Das Ergebnis wird immer der Wert der rechten Seite sein. Mit anderen Worten: NO^X wird immer X sein. Also einfach tun:

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

in Objective-C. Dann ist die Swift-Übersetzung einfach.

+0

Es funktioniert, vielen Dank. –

+0

@ AminNegm-Awad Eigentlich meinte ich 'NO^X' wird immer' X' sein. – rmaddy