我在点击注释的标注时尝试加载网页,因此我尝试使用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字符串?而且我想也值得一提的是,是否有更清洁/更有效的方式来解决这个问题?我想过使用字典但是从长远来看,它最终会成为更多的代码。无论如何,谢谢你的任何建议!
答案 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)