web-dev-qa-db-ja.com

Swift 2.0 - 二項演算子 "|" 2つの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が発生します。私を助けてください。

189
Nikita Zernov

Swift 2では、通常これを行う多くの型がOptionSetTypeプロトコルに準拠するように更新されています。これにより、配列のような構文で使用することができます。この場合は、次のようにします。

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

また、関連する注意として、オプションセットに特定のオプションが含まれているかどうかをチェックしたい場合は、ビット単位のANDやnilチェックを使用する必要はもうありません。配列に値が含まれているかどうかをチェックするのと同じ方法で、オプションセットに特定の値が含まれているかどうかを尋ねることができます。

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

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

Swiftでは、サンプルは次のように書く必要があります。

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
}
386
Mick MacCallum

次のように書くことができます。

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

私にとってうまくいったのは

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

これはSwift 3で更新されました。

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