Enrico Susatyo Enrico Susatyo - 1 year ago 81
iOS Question

How do I unwrap an Optional when pattern matching tuples in Swift?

In Swift, there's a common

if let
pattern used to unwrap optionals:

if let value = optional {
print("value is now unwrapped: \(value)")

I'm currently doing this kind of pattern matching, but with tuples in a switch case, where both params are optionals:

//url is optional here
switch (year, url) {
case (1990...2015, let unwrappedUrl):
print("Current year is \(year), go to: \(unwrappedUrl)")

However, this prints:

"Current year is 2000, go to Optional(www.google.com)"

Is there a way I can unwrap my optional and pattern match only if it's not nil? Currently my workaround is this:

switch (year, url) {
case (1990...2015, let unwrappedUrl) where unwrappedUrl != nil:
print("Current year is \(year), go to: \(unwrappedUrl!)")

Answer Source

You can use the x? pattern:

case (1990...2015, let unwrappedUrl?):
    print("Current year is \(year), go to: \(unwrappedUrl)")

x? is just a shortcut for .Some(x), so this is equivalent to

case (1990...2015, let .Some(unwrappedUrl)):
    print("Current year is \(year), go to: \(unwrappedUrl)")