用Alamofire进行网络请求的一段代码解析(二)

/*

        Router路由器,这个枚举类型采用了URLRequestConvertible协议。采用这个协议的类型,是用来构造URL请求的。这个协议只有一个只读属性URLRequest,它是NSURLRequest类型的。

    

    

    */

    enum Router: URLRequestConvertible {

        

        static let baseURLString = "https://api.500px.com/v2"

        static let consumerKey = "4qf9GGuzHwjVfjmbvoQVpjjbBSjOGv7VbOrSnrgt"

        

        /*

            Swift的枚举中,下例的PopularPhotos等被称为枚举值,而枚举值所指向的值被称为关联值。括号内的类型是关联值的类型。

        */

        case PopularPhotos(Int)

        case PhotoInfo(Int, ImageSize)

        case Comments(Int, Int)

        

        var URLRequest: NSURLRequest {

            

            /*

                这是定义了一个元组。

            

                let (,) = {}()这个语句的意思是,元组(,) 用一个函数的返回值进行初始化;小括号的意思是,立即执行这个函数,将返回值赋值给元组。

            */

            let (path: String, parameters: [String: AnyObject]) = {

                switch self {

                case .PopularPhotos(let page):

                    let params = ["consumer_key": Router.consumerKey, "page": "\(page)", "feature": "popular", "rpp": "50", "include_store": "store_download", "include_states": "votes"]

                    return ("/photos", params)

                

                case .PhotoInfo(let photoID, let imageSize):

                    var params = ["consumer_key": Router.consumerKey, "iamge_size": "\(imageSize.rawValue)"]

                    return ("/photos/\(photoID)", params)

                

                case .Comments(let photoID, let commentsPage):

                    var params = ["consumer_key": Router.consumerKey, "comments": "1", "comments_page": "\(commentsPage)"]

                    return ("/photos/\(photoID)/comments", params)

                    

                }

            }()

            

            

            let URL = NSURL(string: Router.baseURLString)

            let URLRequest = NSURLRequest(URL: URL!.URLByAppendingPathComponent(path))

            let encoding = Alamofire.ParameterEncoding.URL

            

            /*

                ParameterEncoding枚举类型的encode函数没有函数体,那么返回值是如何实现的呢??

            */

            return encoding.encode(URLRequest, parameters: parameters).0

        }

        

    }


你可能感兴趣的:(枚举,swift,元组)