用Alamofire進行網絡請求的一段代碼解析(一)

        /*api

            向服務器發送請求:數組

            request實際上有四個參數,可是後兩個參數都設定爲了默認值,因此在調用的時候只要初始化前兩個參數就能夠。服務器

            第一個參數是設定向服務器發起的請求的方法,一般爲GET方法和POST方法。網絡

            第二個參數就是URL地址。閉包

            第三個參數是填寫一些必要的信息,好比說使用密鑰。函數

            該方法返回一個Alamofire.Request對象url

        

            responseJSON方法有一個必包做爲參數。這個必包有四個參數,沒有返回值。可是responseJSON有一個Alamofire.request的返回值。這個返回值能夠不使用。spa

            下面的responseJSON的寫法是閉包Trailing3d

            參數列表其實是一個元組,因此,不關心的元素,能夠用下劃線忽略掉。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函數是數組的一個函數,對於每一個數組中的元素進行處理。它有一個返回值爲任意類型的閉包。它的返回值是一個任意類型的數組。

                        

                        在這個例子裏,閉包的方法是把字典的idimage_url關鍵字的值對PhotoInfo進行初始化,並生成一個PhotoInfo的對象數組。

                    */

                    PhotoInfo(

                        id: $0["id"] as Int, url: $0["image_url"] as String

                    )

                }

            

        }

相關文章
相關標籤/搜索