Swift 3.0 Изменение синтаксиса для UIUserNotificationSettings

Я использую swift 3.0 и пытаюсь добавить номера значков в свое приложение. Я считаю, что правильный способ сделать это похож на то, что ниже.

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
            UIUserNotificationType.Badge, categories: nil
            ))

application.applicationIconBadgeNumber = 5

Тем не менее, я получаю сообщение об ошибке для использования '|' в блоке UIUserNotificationSettings а также получит ошибку "Ярлыки аргументов (forTypes, categories) не соответствуют ни одной из доступных перегрузок" для UIUserNotificationSettings если в качестве первого аргумента я использую только UIUserNotificationType.badge. Изменил ли swift 3.0 синтаксис этого утверждения?

Ответ 1

Он был обновлен как для Swift 2, так и для Swift 3. Эта строка должна исправить вашу проблему. Также убедитесь, что в других строках с параметром UIUserNotificationType их переменные переключились на нижний регистр.

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

Ответ 2

Насколько я понимаю, UIUserNotificationSettings устарел для iOS 10.0. В настоящее время рекомендуется использовать UNUserNotificationCenter.

Вот что я сделал, чтобы убедиться, что мой код обновлен:

1) Импортируйте структуру UserNotifications в AppDelegate

import UserNotifications

2) Внутри функции didFinishLaunchingWithOptions внутри AppDelegate добавьте следующее:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in

        if granted {
            UIApplication.shared.registerForRemoteNotifications()
        }

    }

    return true
}

После регистрации и разрешения уведомлений вы можете изменить номер значка в любой момент:

UIApplication.shared.applicationIconBadgeNumber = value

Это сработало для меня, я только что протестировал его, отправив удаленное уведомление на свой телефон, и он работал нормально. Надеюсь это поможет.

Ответ 3

"rawValue" может использовать | оператор.

Этот код работает в swift3, но нам этого не нужно.

let types = UIUserNotificationType(rawValue:UIUserNotificationType.alert.rawValue | UIUserNotificationType.sound.rawValue | UIUserNotificationType.badge.rawValue)

application.registerUserNotificationSettings(UIUserNotificationSettings(types: types, categories: nil))