Есть ли сокращение для быстрого возвращения охранника?

Есть ли способ иметь guard автоматически возвращаться без необходимости записывать его каждый раз, например:

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 }

В случае, когда мне действительно нужно сделать что-то в дополнение к returnЯ бы включил else { return } немного с моей дополнительной обработкой.

Это не большая проблема, но было бы неплохо иметь.

2 ответа

Решение

guard заявление набирается с else должно быть, для этого нет ярлыка, но вы можете использовать if..let избежать else заявление.

Или объедините этот оператор связанных переменных с одним guard заявление

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

Вы можете написать этот код, используя 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
}

Короче говоря, нет, вы не можете сократить человека guard ... else { return },

Другие вопросы по тегам