wake-up-neo.com

Typ 'Any' hat keine Indexmitglieder in xcode 8 Swift 3

Meine App soll an einen bestimmten Ort gehen, um die zu ladende Website aufzurufen. In 2.3 hat es wie ein Zauber funktioniert, aber da ich xcode aktualisiert habe (in dem ich nicht viel Erfahrung habe), wird mir der Fehler "Typ 'Any' hat keine Indexmitglieder" angezeigt und der "json" hervorgehoben. kurz vor der dritten Zeile

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

dies ist der zugehörige Code.

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)

Ich habe das Gefühl, etwas Kleines zu vermissen. Wenn es einen besseren Weg gibt, würde ich gerne Vorschläge machen. Die URL gibt diesen JSON zurück

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

aber ich würde es lieben, wenn ich es nur vereinfachen könnte

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

Versuchen Sie dies:

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

Sicherer Weg:

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

Sie müssen den Typ Any in Swift Dictionary-Typ [String:AnyObject] Umwandeln.

Bearbeiten: Swift 3
In Swift 3 ist der Zweck von AnyObject klarer. Also günstiger Swift Dictionary-Typ ist [String:Any].

Any ist ein Alias ​​für jeden Datentyp.
AnyObject ist ein Alias ​​für jeden von einer Klasse abgeleiteten Datentyp.

Weitere Informationen erhalten Sie unter: https://craiggrummitt.com/2016/09/16/any-vs-anyobject-vs-nsobject-in-Swift-3/ =

64
Bista