我是编程新手,当然也很快。我想知道如何将我的请求响应发送回我的viewDidLoad以便在那里使用。 请求,我使用alamofire和json,swiftyJSON。 我想要做的是从包含标题和图像网址的服务器获取数据(JSON)。之后,我试图从图像网址获取图像。 在viewDidLad中,我调用一个Get方法的函数。
override func viewDidLoad() {
super.viewDidLoad()
getData()
//use myStruct
在getData()中我这样做:
func getData()
{
Alamofire.request(.GET,"heregoesurl")
.responseJSON { response in
if let Json = response.result.value {
let json = JSON(Json)
for (_,subJson):(String, JSON) in json {
//get image url
//pass image url to imageGet() method
//add image to an array of myStruct
}
}
}
}
并在imageGet()方法中:
func getImages(url:String,type:String)
{
Alamofire.request(.GET, url)
.responseImage { response in
if let image = response.result.value {
//add image to myStruct
}
}
}
问题是由于请求的异步性质,myStruct在viewDidLoad中没有准备好。我使用completionHandler for getData()方法,它工作正常。但我仍然没有图像,我只有图像网址。我不知道我该怎么做。
任何有关如何做这样的事情的帮助都将不胜感激。
答案 0 :(得分:2)
试试这个:
public func getImages(url:String,type:String){
Alamofire.request(.GET, url).response { (request, response, data, error) in
//For sure that you will have the main queue and you will see the view
dispatch_sync(dispatch_get_main_queue(), {
self.myImageView.image = UIImage(data: data, scale:1) // or store it to your `myStruct`
})
}
}
在getData()函数内部调用它
答案 1 :(得分:0)
使用它:
extension UIImageView {
func downloadImage(from url : String){
let urlRequest = URLRequest(url: URL(string: url)!)
let task = URLSession.shared.dataTask(with: urlRequest){(data,response,error)in
if error != nil {
print(error)
}
DispatchQueue.main.async {
self.image = UIImage(data:data!)
}
}
task.resume()
}
}