/ / Comment gérer les masques (enums) dans Swift 2.0? - swift, enums, eventkit, swift2

Comment gérer les masques (enums) dans Swift 2.0? - swift, enums, eventkit, swift2

Par exemple, dans EventKit, il existe une propriété sur EKCalendar appelé supportedEventAvailabilities qui est de type EKCalendarEventAvailabilityMask. C'est un masque de toutes les disponibilités d'événements prises en charge. Je sais que vous pourriez théoriquement les définir comme ceci (si cette propriété était accessible en écriture):

calendar.supportedEventAvailabilities = [.Busy, .Free]

Mais comment relisez-vous ces valeurs? J'ai fini avec un code comme celui-ci:

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!
}

Mais cela ne me semble pas juste. Est-ce que quelqu'un sait comment faire cela correctement?

Réponses:

3 pour la réponse № 1

EKCalendarEventAvailabilityMask conforme à la nouvelle OptionSetType protocole qui hérite de SetAlgebraType et offre une interface d'ensemble. Vous pouvez vérifier votre adhésion avec

let availabilities = calendar.supportedEventAvailabilities
if availabilities.contains(.Busy) {
// "Busy" is in there!
}

ou

if availabilities.isSupersetOf([.Busy, .Free]) {
// Both .Busy and .Free are available ...
}

ou

if availabilities.intersect([.Busy, .Free]) != [] {
// At least one of .Busy and .Free is available ...
}

Pour plus d'informations, voir protocol SetAlgebraType dans "Référence de la bibliothèque Swift Standard".