2016-09-15 114 views
30

我的應用程序應該前往特定位置以下載需要加載的網站。在2.3中它像一個魅力一樣工作,但因爲我更新了xcode(我沒有很多經驗),它給了我錯誤「類型」任何'沒有下標成員「,並突出顯示」json「在第三行之前類型'任何'在xcode 8中沒有下標成員Swift 3

...Retriever = json["WEB"]... 

這是與它相關的代碼。

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) 

     if let Retriever = json["WEB"] as? [[String: AnyObject]] { 

       for website in Retriever { 

        if let name = website["URL"] as? String { 

          self.loadAddressURL(name) 

我覺得我缺少一些小東西。如果有更好的方法來做到這一點,我會喜歡的建議。該URL返回此JSON

{ 
    "WEB" : [ 
      { 
      "URL" : "http://www.google.com" 
      }  
      ] 
} 

但我喜歡它,如果我可以簡化它只是

{"URL":"http://www.google.com"} 

回答

57

試試這個:

let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject] 

安全的方式:

do { 
    if let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [String:Any] { 
     print(json) 
    } 
} catch let err{ 
    print(err.localizedDescription) 
} 

您必須輸入Any至Swift字典類型[String:AnyObject]

編輯:夫特3
在迅速3的AnyObject目的更明確。所以更有利的Swift Dictionary類型將是[String:Any]

Any是任何數據類型的別名。
AnyObject是任何派生自類的數據類型的別名。

欲瞭解更多信息,請訪問:https://craiggrummitt.com/2016/09/16/any-vs-anyobject-vs-nsobject-in-swift-3/

+0

工作就像一個魅力,我不得不添加了「!」之後,但它像一個魅力 – DaVinci1223

+0

非常感謝:*你節省了我的頭幾小時 –

+2

這將是很好,如果有人可以添加更多有關這個答案的有價值的信息,因爲它正在流行。 :) –

相關問題