Я пытаюсь сделать функцию, чтобы, когда вы нажмете кнопку, вы откроете веб-сайт ресторана, и он работает хорошо, но в некоторых ресторанах нет веб-сайта.

var OnlineMenuLinks = ["https://static.wixstatic.com/media/ed1b11_59335d19e484482e8c0dc9ef0caee605~mv2.jpg/v1/fill/w_708,h_992,al_c,q_85/ed1b11_59335d19e484482e8c0dc9ef0caee605~mv2.jpg","","","http://stackoverflow.com/"]

    @IBAction func OpenOnline(_ sender: Any) {

            let url = URL(string: OnlineLinks[MyIndex])!
            if #available(iOS 10.0, *) {
                UIApplication.shared.open(url, options: [:], completionHandler: nil)
            } else {
                UIApplication.shared.openURL(url)
            }
        }

Ссылки открыты на данный момент и все хорошо. Хотя я хочу, чтобы в массиве было пустое "", появится UIAlertController и скажет, например, что «в этом ресторане нет веб-сайта». Является ли это возможным?

Спасибо за помощь ! :)

0
Newbie Questions 29 Апр 2017 в 14:00

3 ответа

Лучший ответ
var onlineMenuLinks = ["https://static.wixstatic.com/media/ed1b11_59335d19e484482e8c0dc9ef0caee605~mv2.jpg/v1/fill/w_708,h_992,al_c,q_85/ed1b11_59335d19e484482e8c0dc9ef0caee605~mv2.jpg","","","http://stackoverflow.com/"]

let myIndex: Int = 0

func openOnline(_ sender: Any) {
    let string = onlineMenuLinks[myIndex]
    if string.characters.count > 0, let url = URL(string: string), UIApplication.shared.canOpenURL(url) {
        // valid URL
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url)
        }
    } else {
        // invalid URL
        let alert = UIAlertController(title: "This restaurant has no website.", message: nil, preferredStyle: .alert)
        UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true)
    }
}
2
iWheelBuy 29 Апр 2017 в 11:08

Да, это возможно

      func open(_ url: URL?) {
        if let url = url {
            if #available(iOS 10, *) {
                UIApplication.shared.open(url, options: [:],completionHandler: { (success) in
                    print("Open Safari \(success)")
                })
            } else {
                let success = UIApplication.shared.openURL(url)
                print("Open Safari \(success)")
            }
        }else{

            let alert = UIAlertController(title: "Empty!", message: "This restaurant has no website.", preferredStyle: .alert)

            let okAction = UIAlertAction(title: "Ok", style: .default, handler: nil)

            alert.addAction(okAction)
            present(alert, animated: true, completion: nil)

        }
    }
2
iParesh 29 Апр 2017 в 11:06

Не проверяйте правильность строки. В вашем случае ошибка должна отображаться каждый раз, когда URL недопустим (пустой String не создает допустимый экземпляр URL).

var OnlineMenuLinks = ["https://static.wixstatic.com/media/ed1b11_59335d19e484482e8c0dc9ef0caee605~mv2.jpg/v1/fill/w_708,h_992,al_c,q_85/ed1b11_59335d19e484482e8c0dc9ef0caee605~mv2.jpg","","","http://stackoverflow.com/"]

@IBAction func OpenOnline(_ sender: Any) {

    if let url = URL(string: OnlineLinks[MyIndex]) {
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(url)
        }
    } else {
        // show error
    }
}

Может потребоваться проверка количества массивов, если MyIndex превышает длину массива.

guard OnlineLinks.count > MyIndex else {
    // throw an error
}
0
Luca D'Alberti 29 Апр 2017 в 11:17