Created
November 26, 2015 13:18
-
-
Save radex/6c4f8da03ba57422574b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Option 1: if..elseif + optional unwrapping conditions | |
private func handleNotificationAction(id: String?, userInfo: [NSObject: AnyObject], responseInfo: [NSObject: AnyObject]?, completion: () -> Void) { | |
let taskId = userInfo["extra"]?["task_hash"] as? String | |
let projectId = userInfo["extra"]?["project_hash"] as? String | |
let comment = responseInfo?["UIUserNotificationActionResponseTypedTextKey"] as? String | |
if id == "comment", let task = taskId, comment = comment where !comment.isEmpty { | |
} else if id == "invitation_accept", let project = projectId { | |
} else if id == "invitation_decline", let project = projectId { | |
} else if id == "star", let task = taskId { | |
} else if id == "complete", let task = taskId { | |
} else if id == "show" || id == "comment" || id == "delegate", let task = taskId { | |
} else { | |
// assertionFailure | |
} | |
} | |
// Option 2: switch + force unwrap | |
private func handleNotificationAction(id: String?, userInfo: [NSObject: AnyObject], responseInfo: [NSObject: AnyObject]?, completion: () -> Void) { | |
let taskId = userInfo["extra"]?["task_hash"] as? String | |
let projectId = userInfo["extra"]?["project_hash"] as? String | |
let comment = responseInfo?["UIUserNotificationActionResponseTypedTextKey"] as? String | |
switch id { | |
case "comment"? where taskId != nil && comment != nil && !comment.isEmpty: | |
case "invitation_accept"? where projectId != nil: | |
case "invitation_decline"? where projectId != nil: | |
case "star"? where taskId != nil: | |
case "complete"? where taskId != nil: | |
case "show"?, "comment"?, "delegate"? where taskId != nil: | |
default: | |
// assertionFailure | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How about going completely left field and doing something like the following:
Keep functions small, easily extendible and avoids complex conditionals/switch on strings - also brings testing benefits. (Although I do like narfdotpl suggestion)