Switch语句,而不是大量的if语句

问题描述 投票:0回答:2

我目前正在处理通知,并希望打印出一个标识符。如何用一个开关替换所有if语句?

这是我的枚举,它保留所有具有相应字符串值的标识符:

    enum NotificationIdentifier:String {
    case local = "Local Notification"
    case localWithAction = "Local Notification with Action"
    case localWithContent = "Local Notification with Content"
    case pushWithAPNs = "Push Notification with  APNs"
    case pushWithFirebase = "Push Notification with Firebase"
    case pushWithContent = "Push Notification with Content"
}

和我的委托方法:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    if response.notification.request.identifier == NotificationIdentifier.local.rawValue {
        print("Handling notification with the \(NotificationIdentifier.local.rawValue)")
    } else if response.notification.request.identifier == NotificationIdentifier.localWithAction.rawValue {
        print("Handling notification with the \(NotificationIdentifier.localWithAction.rawValue)")
    } else if response.notification.request.identifier == NotificationIdentifier.localWithContent.rawValue {
        print("Handling notification with the \(NotificationIdentifier.localWithContent.rawValue)")
    } else if response.notification.request.identifier == NotificationIdentifier.pushWithAPNs.rawValue {
        print("Handling notification with the \(NotificationIdentifier.pushWithAPNs.rawValue)")
    } else if response.notification.request.identifier == NotificationIdentifier.pushWithFirebase.rawValue {
        print("Handling notification with the \(NotificationIdentifier.pushWithFirebase.rawValue)")
    } else {
        print("Handling notification with the \(NotificationIdentifier.pushWithContent.rawValue)")
    }

    completionHandler()
}
ios swift if-statement switch-statement uilocalnotification
2个回答
0
投票

您可以像这样在Enum上使用开关盒:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    switch response.notification.request.identifier {
        case .local:
            print("local")
        case .localWithAction:
            print("localWithAction")
        case .localWithAction:
            print("localWithAction")
        case .localWithContent:
            print("localWithContent")
        case .pushWithAPNs:
            print("pushWithAPNs")
        case .pushWithFirebase:
            print("pushWithFirebase")
    default:
        print("pushWithContent")
    }
    completionHandler()
}

0
投票

您可以避免进行切换,并且如果这样的其他语句...您会在这段代码中得到NotificationIdentifier大小写...

enum NotificationIdentifier:String {
    case local = "Local Notification"
    case localWithAction = "Local Notification with Action"
    case localWithContent = "Local Notification with Content"
    case pushWithAPNs = "Push Notification with  APNs"
    case pushWithFirebase = "Push Notification with Firebase"
    case pushWithContent = "Push Notification with Content"
}


func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {


    if let notificationIdentifier =   NotificationIdentifier.init(rawValue: response.notification.request.identifier) {

        print(print("Handling notification with the \(notificationIdentifier.rawValue)"))
    }

    completionHandler()
}

0
投票

您可以使用一个打印语句:

let notificationIdentifier = NotificationIdentifier.init(rawValue: response.notification.request.identifier) ?? .pushWithContent)
print("Handling notification with the \(notificationIdentifier.rawValue)")

这也将覆盖默认值(例如.pushWithContent)。


0
投票

初始化enumNotificaitonIdentifier并使用如下所示的切换用例:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    guard let notificationIdentifier = NotificationIdentifier(rawValue: response.notification.request.identifier) else { return }
    switch notificationIdentifier {
    case .local:
    print("Handling notification with the \(NotificationIdentifier.local.rawValue)")
    case .localWithAction:
    print("Handling notification with the \(NotificationIdentifier.localWithAction.rawValue)")
    case .localWithContent:
    print("Handling notification with the \(NotificationIdentifier.localWithContent.rawValue)")
    case .pushWithAPNs:
    print("Handling notification with the \(NotificationIdentifier.pushWithAPNs.rawValue)")
    case .pushWithFirebase:
    print("Handling notification with the \(NotificationIdentifier.pushWithFirebase.rawValue)")
    case .pushWithContent:
    print("Handling notification with the \(NotificationIdentifier.pushWithContent.rawValue)")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.