2017-03-26 45 views
0

將我從通知中收到的正文消息轉換爲URL時遇到了一些問題。我收到以下錯誤:將通知中的JSON轉換爲URL

Could not cast value of type '__NSCFString' (...) to 'NSURL' (...)

我這樣做的方式如下:

let aps = userInfo["aps"] as? Dictionary<String, AnyObject> 
let alert = aps?["alert"] as? Dictionary<String, AnyObject> 
let body = alert?["body"] 
let url = body as! URL 

的JSON結構aps: { alert: { body: "www.google.com"

問:爲什麼鑄造失敗嗎?

+0

順便說一句 - 'www.google.com'不是有效的URL。爲了使其有效,它需要包括「http:」或「https:」方案,例如「http:// www.google.com」。 – rmaddy

+0

@rmaddy真實,不好的例子。我的錯。 – ffritz

回答

2

A String不是URL。您需要使用正確的URL初始值設定項從String創建URL,而不是嘗試轉換它。

您還應該通過安全解包來編寫更多防禦性代碼。

if let aps = userInfo["aps"] as? [String : AnyObject] { 
    if let alert = aps["alert"] as? [String : AnyObject] { 
     if let body = alert["body"] as? String { 
      if let url = URL(string: body) { 
       // do something with url 
      } 
     } 
    } 
} 

你也可以縮短這:

if let aps = userInfo["aps"] as? [String : AnyObject], let alert = aps["alert"] as? [String : AnyObject], let body = alert["body"] as? String { 
    if let url = URL(string: body) { 
     // do something with url 
    } 
} 
+0

非常感謝。這樣做的工作。仍然試圖將我的頭包裹在可選項中並在Swift中投射。 – ffritz