194

我正在尝试以这种方式注册我的本地通知应用程序:

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。请帮我。

4

4 回答 4

387

在 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 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
}
于 2015-06-10T17:30:17.780 回答
35

您可以编写以下内容:

let settings = UIUserNotificationType.Alert.union(UIUserNotificationType.Badge)
于 2015-07-08T22:06:30.083 回答
7

对我有用的是

//This worked
var settings = UIUserNotificationSettings(forTypes: UIUserNotificationType([.Alert, .Badge, .Sound]), categories: nil)
于 2015-09-29T01:56:47.103 回答
2

这已在 Swift 3 中更新。

        let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
        UIApplication.shared.registerUserNotificationSettings(settings)
于 2016-10-04T04:57:59.377 回答