Estoy tratando de registrar mi solicitud de notificaciones locales de esta manera:
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))
En Xcode 7 y Swift 2.0, recibo un error Binary Operator "|" cannot be applied to two UIUserNotificationType operands
. Por favor, ayúdame.
Could not find an overload '|' that accepts the supplied arguments
Respuestas:
En Swift 2, muchos tipos para los que normalmente haría esto se han actualizado para cumplir con el protocolo OptionSetType. Esto permite una sintaxis de tipo matriz para su uso, y en su caso, puede usar lo siguiente.
Y en una nota relacionada, si desea verificar si un conjunto de opciones contiene una opción específica, ya no necesita usar AND bit a bit y una verificación nula. Simplemente puede preguntarle al conjunto de opciones si contiene un valor específico de la misma manera en que verificaría si una matriz contiene un valor.
En Swift 3 , las muestras deben escribirse de la siguiente manera:
y
fuente
flags |= .Alert?
¿Puedes usarflags = [flags, .Alert]
?UIUserNotificationType
, es decirvar flags: UIUserNotificationType = [.Alert, .Badge]
, se tratará como un conjunto, y puede agregar un elemento utilizando métodos de instancia de conjunto comoinsert()
,union()
,unionInPlace()
, o con el enfoque que usted ha mencionado sin preocuparse de los duplicados.UIUserNotificationType
y usas algo comovar flags = [UIUserNotificationType.Alert, UIUserNotificationType.Badge]
en tu declaración, entonces se inferirá que el tipo de bandera es[UIUserNotificationType]
, y agregarle elementos a través de élappend()
u otros métodos dará como resultado duplicados. En el caso de este último, simplemente puede inicializar una instanciaUIUserNotificationType
con la matriz como entrada y todo estará bien, pero recomiendo el enfoque basado en conjuntos para mayor claridad.Puedes escribir lo siguiente:
fuente
NSTrackingAreaOptions.MouseEnteredAndExited.union(NSTrackingAreaOptions.MouseMoved).union(NSTrackingAreaOptions.ActiveAlways)
, pero gracias por una solución de trabajovar options : NSTrackingAreaOptions =[.MouseEnteredAndExited,.MouseMoved,.ActiveAlways]
Lo que funcionó para mí fue
fuente
Esto se ha actualizado en Swift 3.
fuente