Geuis
Geuis

Reputation: 42297

Is there a shorthand for guard return in swift?

Is there is a way to have guard automatically return without needing to actually write it out every single time, e.g:

guard let url = self.webView.url else { return }
guard let componentDict = URLComponents(string: url.absoluteString)?.dict else { return }
guard let id = componentDict["v"] else { return }
guard let idUrl = URL(string: baseUrl + id) else { return }

In the case where I actually need to do something in addition to return, I would include the else { return } bit with my extra handling.

Its not a huge bother, but it would be a nice thing to have.

Upvotes: 5

Views: 599

Answers (2)

rmaddy
rmaddy

Reputation: 318944

You could write that code using if let:

if let url = self.webView.url,
   let componentDict = URLComponents(string: url.absoluteString)?.dict,
   let id = componentDict["v"],
   idUrl = URL(string: baseUrl + id) {
   // do something with idURL
} else {
    return // if needed
}

But in short, no, you can't shorten an individual guard ... else { return }.

Upvotes: 1

Jaydeep Vora
Jaydeep Vora

Reputation: 6223

guard statement is typed with else must be, there is no shortcut for this but you can use if..let to avoid else statement.

Or combine this related variables statement with single guard statement

   guard let url = webView.url,
         let componentDict = URLComponents(string: url.absoluteString)?.dict,
         let id = componentDict["v"],
         let idUrl = URL(string: baseUrl + id)
         else { return }

Upvotes: 5

Related Questions