Noch gewöhnen an die Verwendung von OptionSetType
in Swift.idiomatischer Schnelltest für Optionsset?
In good ol‘C, wenn ich so etwas wie
typedef enum {
CHAR_PROP_BROADCAST =0x01,
CHAR_PROP_READ =0x02,
CHAR_PROP_WRITE_WITHOUT_RESP =0x04,
CHAR_PROP_WRITE =0x08,
CHAR_PROP_NOTIFY =0x10,
CHAR_PROP_INDICATE =0x20,
CHAR_PROP_SIGNED_WRITE =0x40,
CHAR_PROP_EXT =0x80
} CharacteristicProperty;
habe, kann ich eine Reihe von Flaggen mit etwas Einfachen wie testen:
if ((propertiesMask & (CHAR_PROP_NOTIFY | CHAR_PROP_INDICATE)) != 0) ...
Die Swift Alternative wie
aussehen könntelet properties:CBCharacteristicProperties = [.Write, .Read, .Indicate]
!properties.intersect([.Indicate, .Notify]).isEmpty
Gibt es einen idiomatischen Weg, diesen Test zu machen? Kein Fan von! draußen. Aber ansonsten scheint das einfach genug, außer dass ich mich wirklich dafür interessiere, wenn es eine Kreuzung gibt. Das hat mich dazu gebracht, mein eigenes hinzufügen zu wollen.
extension OptionSetType {
func hasIntersection(other:Self) -> Bool {
return !self.intersect(other).isEmpty
}
}
Was mir dann
properties.hasIntersection([.Indicate, .Notify])
Gibt es einen besseren/mehr idiomatischen Weg, dies zu tun zu schreiben erlaubt? Habe ich mein eigenes gerollt und etwas verpasst?
Um das '!' Zu vermeiden, könnten Sie 'prope rties.intersect ([. Geben Sie an, .Notify]). count> 0' – sschale