Almofire.request非同期関数です。あなたがそれを呼び出すと、すぐに返されます。実際にリクエストを行う前に。そのため、何かが 以外にprintln(data)設定される前に呼び出されます。リクエストが実際に完了すると、Alamofire は に渡したクロージャーを呼び出します。そのクロージャーは、実際に使用する場所です(印刷するなど)。datanilresponseJSONdata
Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters)
.responseJSON { (request, response, JSON, error) in
let data: AnyObject? = JSON
// do something useful with data
println(data)
}
コメントからの質問:
しかし、そのデータをテーブルに変換したいとしましょう。すべてのテーブル コードをクロージャ内に配置しますか?
すべてのコードをクロージャー内に配置することもできますが、おそらくすぐに面倒になります。これを処理するより良い方法は、使用しているのと同じ種類のパターンを実装することAlamofire.requestです。基本的に、リクエストを独自の関数にして、パラメーターとしてクロージャーを取ります。次に、に渡すクロージャーで、それを渡すresponseJSON関数に渡されたクロージャーを呼び出しますdata。次に、「そのデータをテーブルに変換する」別の関数を作成しdata、クロージャーから呼び出します。このようなもの:
func callSomeAPI(resultHandler: (data: AnyObject?) -> ()) -> () {
Alamofire.request(.POST, "http://localhost/api/notifications", parameters: parameters)
.responseJSON { (request, response, JSON, error) in
let data: AnyObject? = JSON
resultHandler(data)
}
}
func makeTable(data: AnyObject?) -> () {
// make your table
}
callSomeAPI() { data in
makeTable(data)
}
注:おそらく、ある時点data以外のものに変換したいと思うでしょう。AnyObject?