如何处理 Swift 2.0 中的掩码(枚举)?
How to handle masks (enums) in Swift 2.0?
例如,在 EventKit 中,EKCalendar
上有一个名为 supportedEventAvailabilities
的 属性,类型为 EKCalendarEventAvailabilityMask
。它是所有支持的事件可用性的掩码。我知道理论上你可以这样设置它们(如果这个 属性 是可写的):
calendar.supportedEventAvailabilities = [.Busy, .Free]
但是您如何再次读取这些值?我最终得到了这样的代码:
let availabilities = calendar.supportedEventAvailabilities
if (availabilities.rawValue & EKCalendarEventAvailabilityMask.Busy.rawValue) == EKCalendarEventAvailabilityMask.Busy.rawValue {
// 'Busy' is in there!
}
if (availabilities.rawValue & EKCalendarEventAvailabilityMask.Free.rawValue) == EKCalendarEventAvailabilityMask.Free.rawValue {
// 'Free' is in there!
}
但这感觉不对。有谁知道如何正确执行此操作?
EKCalendarEventAvailabilityMask
符合新的OptionSetType
继承自 SetAlgebraType
并提供类似集合的接口的协议。您可以使用
检查会员资格
let availabilities = calendar.supportedEventAvailabilities
if availabilities.contains(.Busy) {
// 'Busy' is in there!
}
或
if availabilities.isSupersetOf([.Busy, .Free]) {
// Both .Busy and .Free are available ...
}
或
if availabilities.intersect([.Busy, .Free]) != [] {
// At least one of .Busy and .Free is available ...
}
有关详细信息,请参阅 protocol SetAlgebraType
在 "Swift Standard Library Reference".
例如,在 EventKit 中,EKCalendar
上有一个名为 supportedEventAvailabilities
的 属性,类型为 EKCalendarEventAvailabilityMask
。它是所有支持的事件可用性的掩码。我知道理论上你可以这样设置它们(如果这个 属性 是可写的):
calendar.supportedEventAvailabilities = [.Busy, .Free]
但是您如何再次读取这些值?我最终得到了这样的代码:
let availabilities = calendar.supportedEventAvailabilities
if (availabilities.rawValue & EKCalendarEventAvailabilityMask.Busy.rawValue) == EKCalendarEventAvailabilityMask.Busy.rawValue {
// 'Busy' is in there!
}
if (availabilities.rawValue & EKCalendarEventAvailabilityMask.Free.rawValue) == EKCalendarEventAvailabilityMask.Free.rawValue {
// 'Free' is in there!
}
但这感觉不对。有谁知道如何正确执行此操作?
EKCalendarEventAvailabilityMask
符合新的OptionSetType
继承自 SetAlgebraType
并提供类似集合的接口的协议。您可以使用
let availabilities = calendar.supportedEventAvailabilities
if availabilities.contains(.Busy) {
// 'Busy' is in there!
}
或
if availabilities.isSupersetOf([.Busy, .Free]) {
// Both .Busy and .Free are available ...
}
或
if availabilities.intersect([.Busy, .Free]) != [] {
// At least one of .Busy and .Free is available ...
}
有关详细信息,请参阅 protocol SetAlgebraType
在 "Swift Standard Library Reference".