Próbuję zarejestrować moją aplikację do powiadomień lokalnych w ten sposób:
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))
W Xcode 7 i Swift 2.0 - pojawia się błąd Binary Operator "|" cannot be applied to two UIUserNotificationType operands
. Proszę pomóż mi.
Could not find an overload '|' that accepts the supplied arguments
Odpowiedzi:
W Swift 2 wiele typów, dla których zwykle to robisz, zostało zaktualizowanych, aby były zgodne z protokołem OptionSetType. Pozwala to na użycie tablicy podobnej do składni, aw twoim przypadku możesz użyć następujących.
I w powiązanej notatce, jeśli chcesz sprawdzić, czy zestaw opcji zawiera określoną opcję, nie musisz już używać bitowego AND i zerowego sprawdzania. Możesz po prostu zapytać zestaw opcji, czy zawiera on określoną wartość, w taki sam sposób, jak sprawdziłbyś, czy tablica zawiera wartość.
W Swift 3 próbki należy zapisać w następujący sposób:
i
źródło
flags |= .Alert?
Czy możesz użyćflags = [flags, .Alert]
?UIUserNotificationType
, to znaczyvar flags: UIUserNotificationType = [.Alert, .Badge]
, to będzie traktowany jak zestaw, i można dodać element albo za pomocą zestawu metod instancji podobainsert()
,union()
,unionInPlace()
, lub z podejściem, że pan wspomniał, nie martwiąc się o duplikaty.UIUserNotificationType
i nie użyjesz czegoś takiego jakvar flags = [UIUserNotificationType.Alert, UIUserNotificationType.Badge]
w deklaracji, wtedy typ flagi będzie wywnioskowany jako[UIUserNotificationType]
, a dodanie do niej elementów za pomocąappend()
lub innymi metodami spowoduje duplikaty. W przypadku tego ostatniego możesz po prostu zainicjować instancjęUIUserNotificationType
z tablicą jako danymi wejściowymi i wszystko będzie dobrze, ale dla jasności zalecam podejście oparte na zestawie.Możesz napisać następujące:
źródło
NSTrackingAreaOptions.MouseEnteredAndExited.union(NSTrackingAreaOptions.MouseMoved).union(NSTrackingAreaOptions.ActiveAlways)
, ale dzięki za działające rozwiązanievar options : NSTrackingAreaOptions =[.MouseEnteredAndExited,.MouseMoved,.ActiveAlways]
Dla mnie zadziałało
źródło
Zostało to zaktualizowane w Swift 3.
źródło