/*api
向服務器發送請求:數組
request實際上有四個參數,可是後兩個參數都設定爲了默認值,因此在調用的時候只要初始化前兩個參數就能夠。服務器
第一個參數是設定向服務器發起的請求的方法,一般爲GET方法和POST方法。網絡
第二個參數就是URL地址。閉包
第三個參數是填寫一些必要的信息,好比說使用密鑰。函數
該方法返回一個Alamofire.Request對象url
responseJSON方法有一個必包做爲參數。這個必包有四個參數,沒有返回值。可是responseJSON有一個Alamofire.request的返回值。這個返回值能夠不使用。spa
下面的responseJSON的寫法是閉包Trailing。3d
參數列表其實是一個元組,因此,不關心的元素,能夠用下劃線忽略掉。orm
問題:如何實現網絡請求完成後跳用responseJSON()方法?
*/
Alamofire.request(.GET, "https://api.500px.com/v1/photos", parameters:["consumer_key": str]).responseJSON() {
(_, _, JSON, _) in
let photoInfos = (
JSON?.valueForKey("photos") as [NSDictionary]
).filter({
/*
filter是一個數組的過濾函數,它有一個閉包參數。閉包參數有一個任意類型的參數,並返回一個bool值。當bool值爲真時,將對應的數組的元素存放到一個新數組中。
這個過濾條件能夠解讀爲,一個元素爲字典的數組調用filter方法,將字典中key爲「nsfw」的值爲false的字典保存到新的數組中。
*/
($0["nsfw"] as Bool) == false
}).map(){
/*
map函數是數組的一個函數,對於每一個數組中的元素進行處理。它有一個返回值爲任意類型的閉包。它的返回值是一個任意類型的數組。
在這個例子裏,閉包的方法是把字典的id和image_url關鍵字的值對PhotoInfo進行初始化,並生成一個PhotoInfo的對象數組。
*/
PhotoInfo(
id: $0["id"] as Int, url: $0["image_url"] as String
)
}
}