2017-02-24 51 views
-4

我試圖加載一個網頁,當一個註釋的標註被點擊,所以我試圖用switch語句來檢查註釋標題,然後顯示正確的網頁。然而,作爲一個快速的初學者,選擇權給了我相當多的麻煩。我已經嘗試了幾個變化,但不斷收到錯誤。這裏是我的代碼:嘗試使用URL字符串時遇到swift optionals

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 
} 

我剛剛使用URL直接像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

對於初學者來說,爲什麼你鑄造一個字符串轉換爲字符串? '如果讓urlString =「http://www.chilis.com」爲? String'它總是會成功... – Alexander

+0

請在發佈有關錯誤的問題時,重要的是您的問題包括完整的錯誤信息以及明確指出導致錯誤的行。 – rmaddy

+1

'「www.http://georges-ny.com」'?真?? – matt

回答

2

代碼中的第一個if語句是毫無意義的,並且什麼都不做 - 它沒有什麼可選的,因此沒有任何東西可以解開,「http://www.chilis.com」已經是一個字符串,所以沒什麼可投射的,更不用說有條件投射了。

將字符串轉換爲一個URL可能會失敗,這樣是你如果再讓應該去

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

我剛剛試過這個,並得到一個錯誤'致命的錯誤:意外地發現零,而在'self.webview.load'行上解開一個可選值' – KingTim

+0

@KingTim然後'self.webview'是'nil'。檢查你的網點。 – rmaddy

+0

好吧,我在'viewDidLoad'中忘記了'webView = WKWebView()'。這似乎現在正在爲https地址工作,我不得不進入自定義目標屬性,並添加「允許任意負載」爲http的。謝謝! – KingTim

0

URL情況下返回可選值,因爲URL可能無效。您需要拆開它,以便您可以在URLRequest初始值設定項中使用它,該初始值設定項具有非可選值。

因此,像這樣將工作:

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