【发布时间】:2020-08-02 14:25:30
【问题描述】:
如果嵌套列表“调用”包含过去的属性,我正在尝试从我的 API 响应中排除数据
在响应中包含此数据:
[
{
"addressLineOne":"Test",
"addressLineTwo":"Test2",
"calls":{
"dateTime":1597932000, // a date in the future
},
]
排除此数据:
[
{
"addressLineOne":"Test",
"addressLineTwo":"Test2",
"calls":{
"dateTime":1596193200 // a date in the past
},
]
我正在使用 JSON 解码器进行 api 调用:
class Service {
static let shared = Service()
let BASE_URL = "url.com/JsonData"
func fetchClient(completion: @escaping ([Client]) -> ()) {
guard let url = URL(string: BASE_URL) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
// handle error
if let error = error {
print("Failed to fetch data with error: ", error.localizedDescription)
return
}
guard let data = data else {return}
do {
let clients = try JSONDecoder().decode([Client].self, from: data)
completion(clients)
} catch let error {
print("Failed to create JSON with error: ", error.localizedDescription)
}
}.resume()
}
}
任何方向都将不胜感激
【问题讨论】:
-
如果你控制后端,最好在那里进行过滤(即不要返回你不需要的数据)。除此之外,一旦你解码,filter 会从
clients的数组中取出。 -
您可以使用集合的过滤功能来删除日期过去的客户。或者,您使用的 API 可能通过向查询添加参数来支持过滤。你试过什么?
-
不相关但从不在
JSONDecoder/Encoder捕获块中打印error.localizedDescription。始终只打印error实例以获取 real 错误消息。另请阅读您的previous questiion的(已接受)答案
标签: swift