2017-03-26 7 views
0

通知から受信した本文をURLに変換するのに問題があります。JSONを通知からURLに変換します

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

私はこの次の方法をやっている:私は次のエラーを取得しています

JSON構造が aps: { alert: { body: "www.google.com"

質問です

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 

:なぜキャストはここに失敗しているが?

+0

- 'www.google.com'は有効なURLではありません。有効にするには、 'http:// www.google.com'のような' http: 'や' https: 'スキームが必要です。 – rmaddy

+0

@rmaddy真実、悪い例です。私のせい。 – ffritz

答えて

2

StringURLではありません。キャストしようとするのではなく、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

ありがとうございました。これは仕事です。まだ私の頭をオプションの周りに包み込み、スウィフトでキャスティングしようとしています。 – ffritz

関連する問題