Swift-从完成处理程序中获取数据-解码数据

时间:2020-08-09 17:38:12

标签: json swift urlsession

我正在对邮政编码信息站点进行api调用,并编写了一个获取数据的函数,然后使用JSONDecoder进行解析...问题是,当我调用该函数时,数据被困在补全中处理程序。不必使用委托,是否有办法将值从完成处理程序中提取出来,以便在类中的其他地方使用?

HashMap

1 个答案:

答案 0 :(得分:1)

可以尝试使用公共变量而不是完成处理程序。我在我的一个项目中也使用了这种方法:

    //Posts image data in Constants class
func downloadImageFrom(urlString: String){
    let url = URL(string: urlString)!
    
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    
    var data: Data?
    
    URLSession.shared.dataTask(with: request) { (d, r, e) in
        guard let dat = d else {
            print("No Data")
            return
        }
                
        guard r == r else {
            print("No Response")
            return
        }
                
        if let err = e {
            print("ERROR: \(err)")
        }
                
        data = dat
        Constants.imageData = data
            
            
        NotificationCenter.default.post(name: Notification.Name(rawValue: "NewImageData"), object: self)
            
            
    }.resume()