如何解决解析json数据时返回对象为nil
我是swift的初学者,我在解析json数据时有一个线程,对象结果为nil,谁能帮我找出问题所在。如果func返回void,我可以获得正确的数据,但我不能将它作为数组返回。谢谢
struct catalogobject: Hashable,Decodable,encodable{
let objects: [Catalogobject]?
}
func getCatalog() -> [Catalogobject] {
var object : [Catalogobject]!
let url = URL(string: "https://connect.squareupsandBox.com/v2/catalog/list")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("Bearer \(token)",forHTTPHeaderField: "Authorization")
request.addValue("\(content_type)",forHTTPHeaderField: "Content-Type")
request.addValue("\(square_version)",forHTTPHeaderField: "Square-Version")
URLSession.shared.dataTask(with: request) { data,res,error in
let data = data!
do {
let catalogdata = try JSONDecoder().decode(catalogobject.self,from: data)
object = catalogdata.objects
print("object \(object)")
}catch{
print(error)
}
}.resume()
return object
}
解决方法
网络请求是一个异步任务,您应该使用完成块返回数据,而不是通过这种方式返回对象。 在您的代码中,函数体在网络调用完成其任务之前执行并返回。
关于您应该如何做的示例指南:
func getCatalog(_ completion: @escaping ([CatalogObject]) -> ()) {
let url = URL(string: "https://connect.squareupsandbox.com/v2/catalog/list")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("Bearer \(token)",forHTTPHeaderField: "Authorization")
request.addValue("\(content_type)",forHTTPHeaderField: "Content-Type")
request.addValue("\(square_version)",forHTTPHeaderField: "Square-Version")
URLSession.shared.dataTask(with: request) { data,res,error in
let data = data!
do {
let catalogdata = try JSONDecoder().decode(catalogobject.self,from: data)
completion(catalogdata.objects)
print("object \(object)")
}catch{
print(error)
}
}.resume()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。