2017-03-17 4 views
-1

Derzeit wird der Fehler "Mehrdeutige Verwendung von 'tiefgestellt'", wenn nur auf einem echten iPhone. Keine Probleme bei der Verwendung des Simulators. Hier ist mein Code:Mehrdeutige Verwendung von 'tiefgestellten' Swift 3 Kompilierfehler

let url=URL(string:myUrl) 
    do { 
     let allContactsData = try Data(contentsOf: url!) 
     let allContacts = try JSONSerialization.jsonObject(with: allContactsData, options: JSONSerialization.ReadingOptions.allowFragments) as! [String : AnyObject] 
     if let arrJSON = allContacts["data"] { 
      for index in 0...arrJSON.count-1 { 

       let aObject = arrJSON[index] as! [String : AnyObject] 
       if(ChooseSubject.mineFagKoder.contains(aObject["subject"] as! String)){ 
        ids.append(aObject["id"] as! String) 
        names.append(aObject["name"] as! String) 
        subjects.append(aObject["subject"] as! String) 
        descriptions.append(aObject["description"] as! String) 
        deadlines.append(aObject["deadline"] as! String) 
       } 
      } 
     } 
+0

Ich denke, dass das Problem von [String: AnyObject] kommen kann. Ich bin kein Swift-Experte, aber beim Lesen habe ich ein paar Informationen über ähnliche Szenarien bekommen. Überprüfen Sie diese http://stackoverflow.com/questions/33642059/ambiguous-use-of-subscrip-in-swift oder sogar http://stackoverflow.com/questions/33592699/ambiguous-use-of-subscript-xcode- 7-1 – Balanced

+0

Welche Zeile genau? 'Lass aObject = arrJSON [index] as! [String: AnyObject] 'Ich nehme an, es liegt daran, dass Sie dem Compiler nicht gesagt haben, dass' arrJSON' ein Array ist, also können Sie 'arrJSON [index]' nicht tun. – Larme

+0

Diese Zeile: lassen aObject = arrJSON [index] as! [String: AnyObject] Wie kann ich feststellen, dass arrJSON ein Array ist? –

Antwort

0

allererst JSON Wörterbuchtyp in Swift 3 [String:Any].

Der Grund ambiguous use ist, dass der Compiler den Typ allContacts["data"] nicht kennt. Es ist offensichtlich ein Array, aber Sie müssen dem Compiler sagen. Und verwende bitte nicht den hässlichen C-style-Index, der auf Schleifen in Swift basiert. Wenn Sie index und object in einer Wiederholungsschleife benötigen, verwenden Sie enumerated().

if let arrJSON = allContacts["data"] as? [[String : Any]] { 
    for aObject in arrJSON { 
     if ChooseSubject.mineFagKoder.contains(aObject["subject"] as! String) { ... 
Verwandte Themen