Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Type 'Any' Has no Subscript Members in xcode 8 Swift 3 [duplicate]

My App is supposed to go to a specific location to pull down the website it needs to load. In 2.3 it worked like a charm, but since I've updated xcode (which I don't have a ton of experience in) it is giving me the error "type 'Any' has no subscript members" and highlighting the "json" right before line three

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

this is the code related to it.

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) 

I feel like I am missing something small. If there is a better way to do this, I would love suggestions. The URL returns this JSON

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

but I would love it if I could simplify it to just

{"URL":"http://www.google.com"} 
like image 339
DaVinci1223 Avatar asked Sep 15 '16 16:09

DaVinci1223


1 Answers

Try this:

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

Safe way:

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

You have to cast type Any to Swift dictionary type [String:AnyObject].

Edit: Swift 3
In swift 3 the purpose of AnyObject is more clarified. So more favourable Swift Dictionary type will be [String:Any].

Any is an alias for any data type.
AnyObject is an alias for any data type derived from a class.

For more info visit: https://craiggrummitt.com/2016/09/16/any-vs-anyobject-vs-nsobject-in-swift-3/

like image 134
Bista Avatar answered Oct 14 '22 03:10

Bista