Estou tentando registrar meu aplicativo para notificações locais desta maneira:
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))
No Xcode 7 e no Swift 2.0 - eu recebo um erro Binary Operator "|" cannot be applied to two UIUserNotificationType operands
. Por favor me ajude.
Could not find an overload '|' that accepts the supplied arguments
Respostas:
No Swift 2, muitos tipos para os quais você normalmente faria isso foram atualizados para estar em conformidade com o protocolo OptionSetType. Isso permite uma matriz como sintaxe para uso e, no seu caso, você pode usar o seguinte.
E em uma nota relacionada, se você deseja verificar se um conjunto de opções contém uma opção específica, não precisa mais usar AND bit a bit e uma verificação nula. Você pode simplesmente perguntar ao conjunto de opções se ele contém um valor específico da mesma maneira que você verificaria se uma matriz continha um valor.
No Swift 3 , as amostras devem ser escritas da seguinte maneira:
e
fonte
flags |= .Alert?
Você pode usarflags = [flags, .Alert]
?UIUserNotificationType
, isto évar flags: UIUserNotificationType = [.Alert, .Badge]
, em seguida, ele será tratado como um conjunto, e você poderia adicionar um elemento ou usando conjunto de métodos de instância comoinsert()
,union()
,unionInPlace()
ou com a abordagem que você mencionou sem se preocupar com duplicatas.UIUserNotificationType
e usar algo comovar flags = [UIUserNotificationType.Alert, UIUserNotificationType.Badge]
em sua declaração, o tipo do sinalizador será inferido como sendo[UIUserNotificationType]
, e adicionar elementos a ele por meio deappend()
outros métodos resultará em duplicatas. No caso deste último, você pode simplesmente inicializar uma instância doUIUserNotificationType
array como entrada e tudo ficará bem, mas eu recomendo a abordagem baseada em conjunto para maior clareza.Você pode escrever o seguinte:
fonte
NSTrackingAreaOptions.MouseEnteredAndExited.union(NSTrackingAreaOptions.MouseMoved).union(NSTrackingAreaOptions.ActiveAlways)
, Mas graças a uma solução de trabalhovar options : NSTrackingAreaOptions =[.MouseEnteredAndExited,.MouseMoved,.ActiveAlways]
O que funcionou para mim foi
fonte
Isso foi atualizado no Swift 3.
fonte