2016-07-03 8 views
1

次のように私は、JSON形式で映画のリストを取得する機能を持っている:Alamofireから受け取ったデータに変数の値を設定するにはどうすればよいですか?

var size: Int = 0 

func getMovies() { 
    Alamofire.request(.GET, "https://api.themoviedb.org/3/discover/movie", parameters: ["sort_by" : "popularity", "api_key" : "secret api key"]) 
     .validate() 
     .responseJSON { response in 
      switch response.result { 
      case .Success: 
       self.json = JSON(response.result.value!) 
       self.arraySize = self.json["results"].count 
       for num in 0...self.arraySize - 1 { 
        let x = self.json["results"][num]["popularity"] 
        self.movieArray.append(x.double!) 
       } 
       self.movieArray.sortInPlace() 
       for num in 0...self.arraySize - 1 { 
        let path = NSIndexPath(forRow: num, inSection: 0) 
        let cell = self.tableView.cellForRowAtIndexPath(path) 
        cell?.textLabel?.text = (self.findMovieByPopularity(self.movieArray[num]) + ": " + String(self.movieArray[num])) 
       } 
       size = self.json["results"].count 
      case .Failure(let error): 
       print(error) 
      } 
    } 
} 

case .Success:の終わりに向かって、私は試してみて、私は関数の外で宣言された変数sizeを設定し、長さにJSONの1つのプロパティのしかし、この変数をスイッチの外で使用すると、その値はまだ0です。

sizeをプロパティの長さに設定することはできますが、それを関数外で使用することはできますか?

+0

をそれが非同期であります応答。レスポンスが完了するまでサイズは設定されません。そのステートメントにブレークポイントを設定して、ステートメントが正しく設定されていることを確認します。それでもゼロの場合は、結果が正しくない可能性があります。しかし、コードは問題ありません。しかし、私は閉鎖サイクルに入るのを防ぐために、[所有されていない自己]または[弱い自己]を使用して自分自身をクロージャーに渡します。 – SArnab

+0

スレッドのどのカテゴリで、値が適切に設定されているかどうかをチェックしますか? – Suleiman

+0

サイズはインスタンスプロパティとして設定されます。次に、self.sizeを使用して設定することができます。これは関数の外部で使用できるようになります。そのステートメント自体にブレークポイントを追加することでそれを再確認することができます – SArnab

答えて

0

完了ハンドラを追加し、そのような閉鎖に値を割り当てる:あなたがそうのような他の何らかの関数呼び出しでそれを呼び出したいときに

func getMovies(completion: (aSize: Int) ->()) { 

let someSize: Int! 
//your code 
case .Success: 
       //your code 
       let x = self.json["results"][num]["popularity"] 
        self.movieArray.append(x.double!) 
       someSize = self.json["results"].count 
       } 
    completion(aSize: someSize) 
//your code 

と:

getMovies {numSize in 

self.size = numSize 

} 
+0

これはうまくいきません。私がgetMoviesを呼び出すとき、角括弧の外側に 'size'を使用することはできません。なぜなら、それは0のままですからです。 (問題は、関数内で 'size'の値を返す必要があるということです。 – Suleiman

+0

' var size'は 'global'変数です。あなたのコードに書いた通りです。正しい?そして0に初期化されます。そして、Alamofireがデータを取得し終えたら、私はあなたのことを見てきたように更新しますか?試しましたか?それを印刷したときに0と表示されましたか? – Dershowitz123

+0

'getMovies {numSize in self.size = numSize プリント(self.size) }プリント(サイズ)は、括弧外の一方が0で何 – Suleiman

関連する問題