Swift3 Xcode 8:'none'不可用:使用[]构造一个空选项集; 我该怎么办?

kri*_*ish 7 ios swift usernotifications

UIUserNotificationType.none在ViewController.swift上使用了Swift3,我得到了这个错误:'none'不可用user []来构造一个空的选项集; 这是我的代码:

func updateUI() {
       let currentSettings = UIApplication.shared.currentUserNotificationSettings

    if currentSettings?.types != nil {

        if currentSettings!.types == [UIUserNotificationType.badge, UIUserNotificationType.alert] {

            textField.isHidden = false

            button.isHidden = false

            datePicker.isHidden = false

        }
        else if currentSettings!.types == UIUserNotificationType.badge {

            textField.isHidden = true

        }
        else if currentSettings!.types == UIUserNotificationType.none {

            textField.isHidden = true

            button.isHidden = true

            datePicker.isHidden = true

        }

    }

}
Run Code Online (Sandbox Code Playgroud)

Ale*_*ica 14

如错误所示,.noneOptionSet类型没有成员.只需使用[],空选项集.

这应该工作:

func updateUI() {
    guard let types = UIApplication.shared.currentUserNotificationSettings?.types else {
        return
    }

    if types == [.badge, .alert] {
        textField.isHidden = false
        button.isHidden = false
        datePicker.isHidden = false
    }
    else if types == [.badge] {
        textField.isHidden = true
    }
    else if types.isEmpty {
        textField.isHidden = true
        button.isHidden = true
        datePicker.isHidden = true
    }
}
Run Code Online (Sandbox Code Playgroud)

更好的是,使用开关:

func updateUI() {
    guard let types = UIApplication.shared.currentUserNotificationSettings?.types else {
        return
    }

    switch types {
    case [.badge, .alert]:
        textField.isHidden = false
        button.isHidden = false
        datePicker.isHidden = false

    case [.badge]:
        textField.isHidden = true

    case []: 
        textField.isHidden = true
        button.isHidden = true
        datePicker.isHidden = true

    default:
        fatalError("Handle the default case") //TODO
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Thilo一个选项集就像一个常规集 - 所以如果你想测试它是否包含`.badge`(而不仅仅是一组`.badge`),你可以说`types.contains(.徽章)`. (2认同)