Swift 2.0 - двоичный оператор "|" не может применяться к двум операндам UIUserNotificationType

Я пытаюсь зарегистрировать приложение для локальных уведомлений следующим образом:

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

В Xcode 7 и Swift 2.0 - появляется ошибка Binary Operator "|" cannot be applied to two UIUserNotificationType operands. Пожалуйста, помогите мне.

Ответ 1

В Swift 2 многие типы, для которых вы обычно делали это, были обновлены, чтобы соответствовать протоколу OptionSetType. Это позволяет использовать синтаксис массива для использования, и в вашем случае вы можете использовать следующее.

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

И в соответствующей заметке, если вы хотите проверить, содержит ли набор опций определенный параметр, вам больше не нужно использовать побитовое И и проверку нуля. Вы можете просто задать опцию, если она содержит определенное значение так же, как вы бы проверяли, содержит ли массив значение.

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

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

В Swift 3 образцы должны быть записаны следующим образом:

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

и

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

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

Ответ 2

Вы можете написать следующее:

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

Ответ 3

Что сработало для меня, было

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

Ответ 4

Это обновлено в Swift 3.

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