web-dev-qa-db-ja.com

Swift 3.0 UIUserNotificationSettingsの構文変更

私はSwift 3.0を使用しており、アプリにバッジ番号を追加しようとしています。これを行う正しい方法は、以下のものと同様です。

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

application.applicationIconBadgeNumber = 5

ただし、「|」を使用するとエラーが発生します最初にUIUserNotificationType.badgeしかない場合、UIUserNotificationSettingsに対してUIUserNotificationSettingsブロックでエラー「引数ラベル(forTypes、カテゴリ)が利用可能なオーバーロードのいずれにも一致しません」を受け取ります。引数。 Swift 3.0はこのステートメントの構文を変更しましたか?

14
Lee

Swift 2とSwift 3.の両方で更新されました。この行で問題が修正されるはずです。また、UIUserNotificationTypeを持つ他の行で変数が切り替えられていることを確認してください小文字に。

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

私の理解から、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

これは私にとってはうまくいきました、私は私の電話にリモート通知を送信することによってそれをテストしました、そしてそれはうまくいきました。お役に立てれば。

15
Pierce

「rawValue」で使用できます|オペレーター。

このコードはSwift3で機能しますが、その必要はありません。

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

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