web-dev-qa-db-fra.com

Swift 2.0 - Opérateur binaire "|" ne peut pas être appliqué à deux opérandes UIUserNotificationType

J'essaie d'enregistrer mon application pour les notifications locales de la manière suivante:

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

Dans Xcode 7 et Swift 2.0 - J'obtiens l'erreur Binary Operator "|" cannot be applied to two UIUserNotificationType operands. Aidez-moi, s'il vous plaît.

190
Nikita Zernov

Dans Swift 2, de nombreux types pour lesquels vous auriez normalement utilisé cette opération ont été mis à jour pour se conformer au protocole OptionSetType. Cela permet d'utiliser une syntaxe semblable à un tableau, et dans votre cas, vous pouvez utiliser les éléments suivants.

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

Et sur une note connexe, si vous souhaitez vérifier si un jeu d'options contient une option spécifique, vous n'avez plus besoin d'utiliser bit par bit AND et une vérification nil. Vous pouvez simplement demander au jeu d'options s'il contient une valeur spécifique de la même manière que vous vérifieriez si un tableau contenait une valeur.

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

if settings.types.contains(.Alert) {
    // stuff
}

Dans Swift, les exemples doivent être écrits comme suit:

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

et

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

if settings.types.contains(.alert) {
    // stuff
}
386
Mick MacCallum

Vous pouvez écrire ce qui suit:

let settings = UIUserNotificationType.Alert.union(UIUserNotificationType.Badge)
35
Bobj-C

Ce qui a fonctionné pour moi était

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

Cela a été mis à jour dans Swift 3.

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