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 № 1EKCalendarEventAvailabilityMask
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".