【问题标题】:return object is nil when parsing json data [duplicate]解析json数据时返回对象为零[重复]
【发布时间】:2021-06-26 05:46:18
【问题描述】:

我是swift的初学者,我在解析json数据时有一个线程,对象结果为nil,谁能帮我找出问题所在。如果函数返回无效,我可以得到正确的数据,但我不能将它作为一个数组返回。谢谢

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
}

【问题讨论】:

    标签: json swift get


    【解决方案1】:

    网络请求是一个异步任务,您应该使用完成块返回数据,而不是通过这种方式返回对象。 在您的代码中,函数体在网络调用完成其任务之前执行并返回。

    您应该如何做的示例指南:

    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()
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 2014-11-16
      • 1970-01-01
      相关资源
      最近更新 更多