如何将异步请求发送回viewDidLoad方法

时间:2016-07-19 19:33:43

标签: ios swift asynchronous alamofire

我是编程新手,当然也很快。我想知道如何将我的请求响应发送回我的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()方法,它工作正常。但我仍然没有图像,我只有图像网址。我不知道我该怎么做。

任何有关如何做这样的事情的帮助都将不胜感激。

2 个答案:

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