Swift3 - 如何访问闭包

时间:2017-07-31 15:30:40

标签: json swift3 closures

我尝试在请求发出后访问变量pic,但是它在一个闭包中,这就是为什么print(pic)不起作用的原因。

有人会如何访问此内容?

guard let url = URL(string: "myurl") else{ return }
    var pic = ""
    let session = URLSession.shared
    session.dataTask(with: url) { (data, response, error) in
        if let response = response {
            print(response)
        }
        if let data = data {
            print(data)
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary
                if let parseJSON = json {
                    pic = parseJSON["picture"] as! String
                    print(json!)
                }
            } catch {
                print(error)
            }
        }

        }.resume()

  print(pic)
}

1 个答案:

答案 0 :(得分:0)

假设pic是一张图片,您将加载到UIImageView

您可以向ImageView添加活动指示器。然后当你打电话给你的功能下载图片时,只需添加:

guard let url = URL(string: "myurl") else{ return }
activityIndicator.isHidden = false
activityIndicator.startAnimating()

用户将知道正在进行下载。完成后,

DispatchQueue.main.async {
activityIndicator.isHidden = true
activityIndicator.stopAnimating()
myImageView.image = UIImage(named: "pic")
}
   }.resume

主que上的调度将立即更新UI。