5

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.

Geuis
  • 41,122
  • 56
  • 157
  • 219

2 Answers2

5

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 }
Jaydeep Vora
  • 6,085
  • 1
  • 22
  • 40
1

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 }.

rmaddy
  • 314,917
  • 42
  • 532
  • 579