Ich versuche, meine Bewerbung für lokale Benachrichtigungen folgendermaßen zu registrieren:
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))
In Xcode 7 und Swift 2.0 - bekomme ich Fehler Binary Operator "|" cannot be applied to two UIUserNotificationType operands
. Bitte hilf mir.
Could not find an overload '|' that accepts the supplied arguments
Antworten:
In Swift 2 wurden viele Typen, für die Sie dies normalerweise tun würden, aktualisiert, um dem OptionSetType-Protokoll zu entsprechen. Dies ermöglicht eine Array-ähnliche Syntax für die Verwendung. In Ihrem Fall können Sie Folgendes verwenden.
Wenn Sie überprüfen möchten, ob ein Optionssatz eine bestimmte Option enthält, müssen Sie in diesem Zusammenhang nicht mehr bitweises UND und keine Prüfung verwenden. Sie können den Optionssatz einfach fragen, ob er einen bestimmten Wert enthält, genauso wie Sie prüfen würden, ob ein Array einen Wert enthält.
In Swift 3 müssen die Beispiele wie folgt geschrieben werden:
und
quelle
flags |= .Alert?
können Sie verwendenflags = [flags, .Alert]
?UIUserNotificationType
, das heißtvar flags: UIUserNotificationType = [.Alert, .Badge]
, dann wird es wie ein Satz behandelt werden, und Sie könnten ein Element entweder hinzufügen , indem Sie mit Set Instanzmethoden wieinsert()
,union()
,unionInPlace()
oder mit dem Ansatz , dass Sie , ohne sich um Duplikate erwähnt.UIUserNotificationType
und so etwas wievar flags = [UIUserNotificationType.Alert, UIUserNotificationType.Badge]
in Ihrer Deklaration verwenden, wird auf den Typ des Flags geschlossen[UIUserNotificationType]
, und das Hinzufügen von Elementen überappend()
oder über andere Methoden führt zu Duplikaten. Im letzteren Fall können Sie einfach eine Instanz vonUIUserNotificationType
mit dem Array als Eingabe initialisieren, und alles wird gut, aber ich empfehle den satzbasierten Ansatz aus Gründen der Übersichtlichkeit.Sie können Folgendes schreiben:
quelle
NSTrackingAreaOptions.MouseEnteredAndExited.union(NSTrackingAreaOptions.MouseMoved).union(NSTrackingAreaOptions.ActiveAlways)
, aber danke für eine funktionierende Lösungvar options : NSTrackingAreaOptions =[.MouseEnteredAndExited,.MouseMoved,.ActiveAlways]
Was für mich funktioniert hat war
quelle
Dies wurde in Swift 3 aktualisiert.
quelle