在Swift 1.2之前,您可以对位掩码执行~(not):

bitmask = ~otherBitmask

但是在Swift 2.0中,位掩码现在是OptionSetType并且不能在~上使用OptionSetType,现在如何在~上执行OptionSetType操作?

最佳答案

您可以对原始值执行“位非”。例子:

let otherBitmask : NSCalendarOptions = [.MatchLast, .MatchNextTime]
let bitmask = NSCalendarOptions(rawValue: ~otherBitmask.rawValue)

如果您经常需要,可以定义一个泛型
~operator forOptionSetType
prefix func ~<T : OptionSetType where T.RawValue : BitwiseOperationsType>(rhs: T) -> T {
    return T(rawValue: ~rhs.rawValue)
}

let otherBitmask : NSCalendarOptions = [.MatchLast, .MatchNextTime]
let bitmask = ~otherBitmask

07-24 21:30