switch 语句而不是大量的 if 语句
Switch statement instead of a ton of if statements
我目前正在处理通知并想打印出一个标识符。如何用一个开关替换所有 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()
}
您可以像这样在 Enum 上使用 switch case:
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()
}
你可以避免这样的 switch 和 if else 语句......你得到 NotificationIdentifier
这段代码的情况......
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
if let notificationIdentifier = NotificationIdentifier(rawValue: response.notification.request.identifier) {
print("Handling notification with the \(notificationIdentifier.rawValue)")
switch notificationIdentifier {
case .local:
print("Handle local")
case .localWithAction:
print("Handle localWithAction")
case .localWithContent:
print("Handle localWithContent")
case .pushWithAPNs:
print("Handle pushWithAPNs")
case .pushWithFirebase:
print("Handle pushWithFirebase")
case .pushWithContent:
print("Handle pushWithContent")
}
} else {
print("cant convert to NotificationIdentifier")
}
completionHandler()
}
如果您只想打印出一个标识符,您可以使用一个打印语句:
let notificationIdentifier = NotificationIdentifier.init(rawValue: response.notification.request.identifier) ?? .pushWithContent)
print("Handling notification with the \(notificationIdentifier.rawValue)")
这也将涵盖默认值(例如 .pushWithContent
)。
初始化 NotificationIdentifier
的 enum
并像下面这样使用 switch case:
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)")
}
}
我目前正在处理通知并想打印出一个标识符。如何用一个开关替换所有 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()
}
您可以像这样在 Enum 上使用 switch case:
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()
}
你可以避免这样的 switch 和 if else 语句......你得到 NotificationIdentifier
这段代码的情况......
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
if let notificationIdentifier = NotificationIdentifier(rawValue: response.notification.request.identifier) {
print("Handling notification with the \(notificationIdentifier.rawValue)")
switch notificationIdentifier {
case .local:
print("Handle local")
case .localWithAction:
print("Handle localWithAction")
case .localWithContent:
print("Handle localWithContent")
case .pushWithAPNs:
print("Handle pushWithAPNs")
case .pushWithFirebase:
print("Handle pushWithFirebase")
case .pushWithContent:
print("Handle pushWithContent")
}
} else {
print("cant convert to NotificationIdentifier")
}
completionHandler()
}
如果您只想打印出一个标识符,您可以使用一个打印语句:
let notificationIdentifier = NotificationIdentifier.init(rawValue: response.notification.request.identifier) ?? .pushWithContent)
print("Handling notification with the \(notificationIdentifier.rawValue)")
这也将涵盖默认值(例如 .pushWithContent
)。
初始化 NotificationIdentifier
的 enum
并像下面这样使用 switch case:
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)")
}
}