是否可以从PHP发送两个JSON对象到Swift?

时间:2017-12-22 15:41:32

标签: php json swift

我想从PHP到我的应用程序获得多个 jsonObject 。问题是我似乎无法为我的应用程序获取多个对象。以下是我想要做的一个例子:

PHP文件:

<?php 

   echo json_encode([$value1, $value2]);

?>

我使用了如下所示的dataTask方法将数据从PHP传递到我的Swift应用程序。

let task = URLSession.shared.dataTask(with: request) { (data: [Data?], 
response: URLResponse?, error: Error?) in

 var result = [Conversation]()
 var chck = [String]()  

 do{
     result = try JSONDecoder().decode([Conversation].self, from: data![0]) as Data)
     chck = try JSONDecoder().decode([String].self, from: data![1]) as Data)

  }catch{
       print("error"+error.localizedDescription)

}
        //do something
}
task.resume()

显然,我没有得到这两个变量。我试图将$value1$value2放在一个数组中,然后将它回显给应用程序,但显然它对我不起作用。 data![0]data![1]会出错。有人可以借给我一只手吗?

1 个答案:

答案 0 :(得分:2)

我在您的Swift代码中推断$value1$value2是两种不同类型的结果。对于异构对象的集合,我建议使用关联数组(即字典):

<?php 

   echo json_encode(Array("result" => $value1, "chck" => $value2));

?>

你用以下内容解析:

struct ServerResult: Decodable {
    let result: [Conversation]
    let chck: [String]
}

let serverResult = try JSONDecoder().decode(ServerResult.self, from: data!)

现在,鉴于你还没有分享细节,我假设:

  • $value1是一个结构合理的Conversation;
  • 数组
  • Conversation本身就是Decodable;和
  • $value2是一个结构合理的String
  • 数组

我还建议避免使用data!,因为如果出现服务器错误,您的应用就会崩溃。我建议你优雅地检测错误,例如:

let task = URLSession.shared.dataTask(with: request) { data, _, error in    
    guard let data = data, error == nil else {
        print(error ?? "Unknown error")
        return
    }

    do {
        let serverResult = try JSONDecoder().decode(ServerResult.self, from: data)
        // do something
    } catch let parseError {
        print(parseError)
    }
}
task.resume()