Отображать предупреждение, если URL не может быть открыт - PullRequest
1 голос
/ 22 апреля 2019

Я хочу показать предупреждение пользователям через UIAlertController, когда мое приложение не может открыть URL.Вот мой код:

guard let url = URL(string: urlLink) else {
  return
}
UIApplication.shared.open(url, options: [:])

И мое созданное оповещение:

let alert = UIAlertController(title: "Warning", message: "Problem with URL.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
self.present(alert, animated: true)

Если я переместу свое оповещение внутри оператора guard, оно никогда не произойдет.Я проверил это, изменив urlLink на случайное String, например, "123".Любые идеи о том, как я могу показать предупреждение?

РЕДАКТИРОВАТЬ:

Я использовал canOpenURL, которые возвращают Bool.Теперь мой код:

guard let url = URL(string: urlLink) else {
    return
}
if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url, options: [:])           
} else {
    let alert = UIAlertController(title: "Warning", message: "Problem with URL.", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
    self.present(alert, animated: true)
}

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Должно быть раньше return

guard let url = URL(string: urlLink) , UIApplication.shared.canOpenURL(url) else {

  let alert = UIAlertController(title: "Warning", message: "Problem with URL.",   preferredStyle: .alert)
  alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
  self.present(alert, animated: true)
  return
}
0 голосов
/ 23 апреля 2019

Может быть, потому что вы забыли поставить обработчик завершения после метода .open, а также добавить «как URL» в canOpenURL.Попробуйте это:

let url = URL (строка: urlLink)

        if UIApplication.shared.canOpenURL(url! as URL){

            UIApplication.shared.open(url!, options: [:], completionHandler: nil)
        }
        else{

            let appFailed =  UIAlertController(title: "Warning!", message: "Problem with URL.", preferredStyle: .alert)
            appFailed.addAction(UIAlertAction(title: "Ok", style: .default, handler: {(action) in

                self.present(appFailed, animated: true, completion: nil)
            }))
        }
...