我尝试在请求发出后访问变量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)
}
答案 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。