2016-07-23 10 views
1

Wenn ich versuche, den Code auf meinem iPhone zu laufen, bekomme ich folgende Fehlermehrdeutige Verwendung von Index-Fehler nur auf realen Gerät

rrr.swift:356:72: Ambiguous use of 'subscript' 

Das Merkwürdige ist, es geschieht nur, wenn ich die app ausführen möchten am Telefon, am Simulator funktioniert es aber gut.

Es gibt 3 Zeilen, die den Fehler wo verursachen. Ich habe sie unten im Code in Großbuchstaben notiert. Ich versuche auf Eigenschaften in einem Array innerhalb des JSON-Arrays zuzugreifen. Ich vermute, dass ich es falsch mache, aber keine Ahnung habe, wie ich es beheben kann.

Wie können diese Eigenschaften ohne den tiefgestellten Fehler abgerufen werden?

self.restApi.getSchoolDetails(schoolId) {responseObject, error in 
     // use responseObject and error here 

     self.schoolDetailsCollection = NSDictionary(dictionary: responseObject! as! [String : AnyObject]) 
     print(self.schoolDetailsCollection) 

     if let response = responseObject as? NSDictionary { 
      //parse the response object 
      self.schoolDetailsList = (response as? NSDictionary)! 

      //assigning all values to shareData class 
      self.shareData.sco_id = response["result"]!["sco_id"] as!NSInteger 
      self.shareData.address = response["result"]!["address"] as!String 
      self.shareData.name = response["result"]!["name"] as! String 
      print("school name") 
      print(self.shareData.name) 
      self.shareData.intro = response["result"]!["intro"] as! String 
      self.shareData.sell_point = response["result"]!["sell_point"] as! String 
      self.shareData.city = response["result"]!["city"] as! String 
      self.shareData.cou_id = response["result"]!["cou_id"] as! String 

      //get images from the nested array in the json array 
      /THESE THREE LINES CAUSE THE ERROR SUBSRCIPT 
      self.shareData.image1 = response["result"]!["images"][0]! as! String 
      self.shareData.image2 = response["result"]!["images"]![1] as! String 
      self.shareData.image3 = response["result"]!["images"]![2] as! String 

      print(self.shareData.image1) 
      print(self.shareData.image2) 
      print(self.shareData.image3) 



      //open next controller after all info has been set correctly 
      //info is being passed by Singleton class Sharedata 
      if let COBezierDemoViewController = self.storyboard!.instantiateViewControllerWithIdentifier("COBezierDemoViewController") as? COBezierDemoViewController { 
       self.presentViewController(COBezierDemoViewController, animated: true, completion: nil) 
      } 

     } 

    } 

} 

Die JSON-Datei:

{ 
result =  { 
    address = "223 Vincent St, West Perth WA 6005, Australia"; 
    city = Perth; 
    "cou_id" = AU; 
    "cur_id" = ""; 
    environment = R; 
    financed = "<null>"; 
    images =   (
     "Phoenix_Academy_1.jpeg", 
     "Phoenix_Academy_3.jpeg", 
     "Phoenix_Academy_2.jpeg" 
    ); 
    intro = "Our language school in Perth has a modern campus and a spacious garden. The language school is located 10 minutes north from the city center. You can reach the city center and the famous bea 

Antwort

1

Wie Sie diesen Fehler in dieser Zeile Hinweis:

self.shareData.image1 = response["result"]!["images"][0]! as! String 

Fehler:

Fehler ist [0] Index, die Sie implementieren, werden in AnyObject.

response["result"]!["images"] // this is returning Optional<AnyObject> which do not have subscript option. 

korrekte Art und Weise sollte dies sein:

  1. Niedergeschlagen AnyObject as? [String] // dies entweder nil zurückkehren oder ein optionales Array<String?> wo String ist Bildnamen.

Without downcasting, you will get error: Ambiguous use of subscript.

let images = response["result"]? ["images"] as? [String] 
    images?.flatMap({ $0 }).forEach { 
    print($0) // Phoenix_Academy_1.jpeg, Phoenix_Academy_3.jpeg, Phoenix_Academy_2.jpeg 
    } 
+0

Thx viel. funktioniert gut und hilft mir, mich besser zu verstehen –

Verwandte Themen