mik*_*ike 4 swap xor ios swift
今天我正在阅读有关XOR Swaps的内容,并认为我会尝试在Swift中实现一个可以执行此操作的函数.我成功写了这个函数的非泛型版本:
import UIKit
func xorSwap (inout x: Int, inout y: Int) {
    if x != y {
        x ^= y
        y ^= x
        x ^= y
    }
}
var a = 10
var b = 20
xorSwap(&a, &b)
println(a) //=> 20
println(b) //=> 10
然后我尝试编写一个通用版本,但编译器抱怨"T与Bool不同".我假设我需要声明符合性的另一个协议,但我不确定那是什么.这是对通用版本的尝试:
import UIKit
func xorSwap<T: Equatable> (inout x: T, inout y: T) {
    if x != y {
        x ^= y
        y ^= x
        x ^= y
    }
}
var a = 10
var b = 20
xorSwap(&a, &b)
println(a)
println(b)  
有没有人对此有更好的理解,可以帮助我填补我的理解空白?谢谢.
你可以使用内置的 BitwiseOperationsType
func xorSwap<T: protocol<BitwiseOperationsType, Equatable>> (inout x: T, inout y: T) {
    if x != y {
        x ^= y
        y ^= x
        x ^= y
    }
}
var a = 10
var b = 20
xorSwap(&a, &b)
println(a) // -> 20
println(b) // -> 10
var a = NSStringCompareOptions.CaseInsensitiveSearch
var b = NSStringCompareOptions.BackwardsSearch
xorSwap(&a, &b)
a == .BackwardsSearch // -> true
b == .CaseInsensitiveSearch // -> true