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))