Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
827 views
in Technique[技术] by (71.8m points)

ios - 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!)")
}       
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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)")

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...