2017-03-17 78 views
-1

當只在真正的iPhone上構建時,目前收到錯誤「模糊使用'下標''」。使用模擬器時沒有任何問題。這裏是我的代碼:模糊使用「下標」Swift 3編譯錯誤

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

我想問題可能來自[String:AnyObject]。我不是Swift專家,但是通過閱讀,我獲得了有關類似場景的一些信息。檢查了這個http://stackoverflow.com/questions/33642059/ambiguous-use-of-subscript-in-swift或甚至http://stackoverflow.com/questions/33592699/ambiguous-use-of-subscript-xcode- 7-1 – Balanced

+0

究竟哪一行?let aObject = arrJSON [index] as! [String:AnyObject]''我想這是因爲你沒有告訴編譯器'arrJSON'是一個數組,所以你不能'arrJSON [index]'。 – Larme

+0

This line: let aObject = arrJSON [index] as! [字符串:AnyObject]。 我怎麼知道arrJSON是一個數組? –

回答

0

首先,Swift 3中的JSON字典類型是[String:Any]

ambiguous use原因是編譯器不知道allContacts["data"]的類型。這顯然是一個數組,但你需要告訴編譯器。請不要在Swift中使用基於循環的醜陋C風格索引。如果在重複循環中需要indexobject,請使用enumerated()

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