2016-07-23 80 views
1

當我嘗試在我的iPhone運行,下面的代碼,我收到以下錯誤曖昧使用標錯誤

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

奇怪的是它只有當我想要運行的應用情況在電話上,在模擬器上,但它工作正常。

有3行導致錯誤的地方。我在下面的代碼中用大寫字母指出了它們。 我嘗試訪問JSON數組內的數組中的屬性,我懷疑我是以錯誤的方式做它,但不知道如何解決它。

如何在沒有下標錯誤的情況下檢索這些屬性?

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) 
      } 

     } 

    } 

} 

的JSON文件:

{ 
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 

回答

1

正如你暗示,錯誤在這行:

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

錯誤:

錯誤是[0]標您正在實現在AnyObject中。

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

正確的方法應該是這樣的:

  1. 低迷現狀AnyObject as? [String] //這將要麼返回nil或可選Array<String?>其中String是形象的名字。

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了很多。運作良好,有助於更好地瞭解我 –