尝试使用URL字符串时遇到swift选项问题

时间:2017-02-24 21:47:24

标签: ios swift webview

我在点击注释的标注时尝试加载网页,因此我尝试使用switch语句检查注释标题,然后显示正确的网页。然而,作为一个快速的初学者,选择性给我带来了相当多的麻烦。我尝试过多种变体,但不断出错。这是我的代码:

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    let restaurant = view.annotation as! Restaurants
    let placeName = restaurant.title!
    let placeInfo = restaurant.info


    switch placeName {
    case "Chili's":
        if let urlString = "http://www.chilis.com" as? String {
            let chilisUrl = URL(string: urlString)
            self.webView.load(URLRequest(url: chilisUrl!))
        }
    case "George's":
        if let urlString = "http://www.georges-ny.com" as? String {
            let georgesUrl = URL(string: urlString)
            self.webView.load(URLRequest(url: georgesUrl!))
        }
    case "TGI Friday's":
        if let urlString = "https://www.tgifridays.com" as? String {
            let fridaysUrl = URL(string: urlString)
            self.webView.load(URLRequest(url: fridaysUrl!))
        }
    case "Reserve Cut":
        if let urlString = "http://reservecut.com" as? String {
            let rcUrl = URL(string: urlString)
            self.webView.load(URLRequest(url: rcUrl!))
        }
    case "Bill's Bar & Burger":
        if let urlString = "http://www.billsbarandburger.com" as? String {
            let billsUrl = URL(string: urlString)
            self.webView.load(URLRequest(url: billsUrl!))
        }
    default:
        if let urlString = "http://www.oharaspubnyc.com" as? String {
            let oharasUrl = URL(string: urlString)
            self.webView.load(URLRequest(url: oharasUrl!))
        }
    }



    webView.allowsBackForwardNavigationGestures = true
    self.view = webView
}

我尝试过直接使用网址,例如self.webView.load(URLRequest(url: "http://reservecut.com" as! URL))

let rcUrl = URL(string: "http://reservecut.com")
self.webView.load(URLRequest(url: rcUrl!))

但这些也给我带来了麻烦。

如何安全地解包(?)并在此处使用URL字符串?而且我想也值得一提的是,是否有更清洁/更有效的方式来解决这个问题?我想过使用字典但是从长远来看,它最终会成为更多的代码。无论如何,谢谢你的任何建议!

2 个答案:

答案 0 :(得分:2)

你的代码中的第一个if语句是没有意义的,什么都不做 - 没有任何可选的东西,因此没有什么可以解包,而“http://www.chilis.com”已经是一个字符串所以没有什么可以抛出,更不用说有条件地施放。

将字符串转换为URL可能会失败,因此这就是if let应该去的地方

        if let chilisUrl = URL(string: "http://www.chilis.com")
        {
            self.webView.load(URLRequest(url: chilisUrl))
        }

答案 1 :(得分:0)

URL个实例作为可选值返回,因为URL可能无效。您需要打开它以便在URLRequest初始化程序中使用它,它需要一个非可选值。

因此,这样的事情会起作用:

guard let url = URL(string: "www.google.com") else { fatalError("Invalid URL") }
let request = URLRequest(url: url)
webview.load(request)