2016-07-19 12 views
1

私はプログラミング上、もちろん迅速です。私はどのように私のviewDidLoadに私の要求応答を返信してそこに使うことができるのだろうと思っています。 、私はalamofireを使用しています。jsonはswiftyJSONです。 私がやろうとしているのは、タイトルと画像のURLを含むサーバーからデータ(JSON)を取得することです。その後、私は画像のURLから画像を取得しようとしています。 viewDidLadの 、私はGetメソッドである関数を呼び出します。 getDataでviewDidLoadメソッドへの非同期要求の返信方法

override func viewDidLoad() { 
    super.viewDidLoad() 
    getData() 
    //use myStruct 

()私はこれを行う:

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で準備が整いました。私はgetData()メソッドのためのcompletionHandlerを使用し、それは正常に動作します。しかし、私はまだイメージを持っていないと私はちょうどそこにイメージのURLを持っています。私は何をしなければならないのか分かりません。

このようなことを行うための助けがあれば幸いです。

+0

チェック[この](http://stackoverflow.com/a/を38417602/5654848)。私は補完ハンドラの使い方について説明しました。あなたは正しく使用していません。 – Dershowitz123

+0

@ Dershowitz123実際に私は投稿コードで補完を使用していませんでした。私はそれを使用することを意味しましたが、私が投稿したものでは私はそれらを使用しませんでした。私の本当の質問は、私は別のURLを持つ画像を取得し、私がgetData()補完ハンドラを使用している間にそれらを使用することです。 –

+0

はカスタム構造体myStructですか? getData()を呼び出すためだけにinitを使用できますか? –

答えて

2

これを試してみてください:のgetDataの内部

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` 
     }) 
    } 
} 

呼び出し、それを()関数

+0

、それは問題を解決しません。とにかく、私はいくつかのトリックでそれを処理しました。御時間ありがとうございます ;) –

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