2016-11-07 126 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