2016-11-07 294 views
0

我環顧四周,但我找不到解決這個一直在困擾我的錯誤的答案。我嘗試添加「as!NSMutableArray」,但那給了我另一個錯誤。任何想法如何解決它?我將我的項目從Objective-C轉換爲Swift,希望代碼很好,我現在有20多個錯誤,現在只有3個錯誤。謝謝。Swift JSONSerialization.jsonObject錯誤

錯誤消息:

'jsonObject' produces 'Any', not the expected contextual result type 'NSMutableArray' 

code error picture

代碼從服務器檢索數據

// Retrieving Data from Server 
func retrieveData() { 

    let getDataURL = "http://ip/example.org/json.php" 
    let url: NSURL = NSURL(string: getDataURL)! 

    do { 

     let data: NSData = try NSData(contentsOf: url as URL) 
     jsonArray = JSONSerialization.jsonObject(with: data, options: nil) 
    } 
    catch { 
     print("Error: (data: contentsOf: url)") 
    } 

    // Setting up dataArray 
    var dataArray: NSMutableArray = [] 

    // Looping through jsonArray 
    for i in 0..<jsonArray.count { 

     // Create Data Object 

     let dID: String = (jsonArray[i] as AnyObject).object(forKey: "id") as! String 
     let dName: String = (jsonArray[i] as AnyObject).object(forKey: "dataName") as! String 
     let dStatus1: String = (jsonArray[i] as AnyObject).object(forKey: "dataStatus1") as! String 
     let dStatus2: String = (jsonArray[i] as AnyObject).object(forKey: "dataStatus2") as! String 
     let dURL: String = (jsonArray[i] as AnyObject).object(forKey: "dataURL") as! String 

     // Add Data Objects to Data Array 
     dataArray.add(Data(dataName: dName, andDataStatus1: dStatus1, andDataStatus2: dStatus2, andDataURL: dURL, andDataID: dID)) 
    } 

    self.myTableView.reloadData() 
} 

回答

2

jsonObject該函數將返回類型AnyjsonArray的值的類型NSMutableArray。如果出現問題,此功能會引發錯誤,請在其前面輸入try關鍵字。根據我的經驗,將jsonArray的類型更改爲字典數組,以便輕鬆提取數據。

do { 
     let data: Data = try Data(contentsOf: url as URL) 
     let jsonArray: [[String: AnyObject]] = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [[String: AnyObject]] 
     print("json: \(jsonArray)") 

     for dict in jsonArray { 
      let dataName = dict["dataName"] as! String 
      print("dataName: \(dataName)") 
     } 
    } 
    catch { 
     print("Error: (data: contentsOf: url)") 
    } 
+0

好了,所以我嘗試了代碼,我得到了2個錯誤,一個說「無法引用類型‘數據’初始化與類型的參數列表‘(contentsOf:URL)’」,第二個錯誤說「不明確引用成員'jsonObject(with:options :)'「 - 不知道他們的意思 – BroSimple

+0

你使用Swift 2或3嗎? –

+0

我用Swift 3. – BroSimple