Swift 2.0 – El operador binario “|” no se puede aplicar a dos operandos UIUserNotificationType

Estoy intentando registrar mi aplicación para notificaciones locales de esta manera:

UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil)) 

En Xcode 7 y Swift 2.0, obtengo el error Binary Operator "|" cannot be applied to two UIUserNotificationType operands Binary Operator "|" cannot be applied to two UIUserNotificationType operands . Por favor, ayúdame.

En Swift 2, muchos tipos para los que normalmente haría esto se han actualizado para cumplir con el protocolo OptionSetType. Esto permite una syntax similar a la de una matriz para su uso, y en su caso, puede usar lo siguiente.

 let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge], categories: nil) UIApplication.sharedApplication().registerUserNotificationSettings(settings) 

Y en una nota relacionada, si desea verificar si un conjunto de opciones contiene una opción específica, ya no necesita usar Y a nivel de bits y una verificación nula. Simplemente puede preguntar a la opción establecida si contiene un valor específico de la misma manera que verificaría si una matriz contiene un valor.

 let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge], categories: nil) if settings.types.contains(.Alert) { // stuff } 

En Swift 3 , las muestras se deben escribir de la siguiente manera:

 let settings = UIUserNotificationSettings(types: [.alert, .badge], categories: nil) UIApplication.shared.registerUserNotificationSettings(settings) 

y

 let settings = UIUserNotificationSettings(types: [.alert, .badge], categories: nil) if settings.types.contains(.alert) { // stuff } 

Puedes escribir lo siguiente:

 let settings = UIUserNotificationType.Alert.union(UIUserNotificationType.Badge) 

Lo que funcionó para mí fue

 //This worked var settings = UIUserNotificationSettings(forTypes: UIUserNotificationType([.Alert, .Badge, .Sound]), categories: nil) 

Esto ha sido actualizado en Swift 3.

  let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) UIApplication.shared.registerUserNotificationSettings(settings)