Swift 2.0-二进制运算符“ |”不能应用于两个 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。请帮助我。

47083 次浏览

在 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
}

你可以这样写:

let settings = UIUserNotificationType.Alert.union(UIUserNotificationType.Badge)

对我有用的是

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

这个已经在 Swift 3中更新了。

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