文档章节

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

rainckoo
 rainckoo
发布于 2015/02/26 20:46
字数 311
阅读 471
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

/*

        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

        }

        

    }


© 著作权归作者所有

rainckoo
粉丝 2
博文 27
码字总数 6114
作品 0
大兴
程序员
私信 提问
加载中
请先登录后再评论。
对于AlamoFire几点思考

本文由CocoaChina--BYB1132(论坛ID)翻译 原文:Thoughts On AlamoFire--Swift’s AFNetworking Implementation HTTP协议就是现代开发的同义词,对于有经验的iOS开发者来说, 熟悉并尽可能使...

刘星石
2016/03/02
34
0
Alamofire的设计之道

前言: Alamofire是一个由Swift编写的优雅的网络开发框架。 大部分用Swift编写的iOS App的网络模块都是基于Alamofire的。作为Swift社区最活跃的几个项目之一,有许多开发者在不断的对其进行完...

黄文臣
2017/06/15
0
0
Alamofire(6)— 多表单上传

😊😊😊Alamofire专题目录,欢迎及时反馈交流 😊😊😊 Alamofire (1)—— URLSession必备技能 Alamofire (2)—— 后台下载 Alamofire (3)—— Request Alamofire (4)—— ...

Cooci_和谐学习_不急不躁
2019/09/19
0
0
Alamofire源码解读系列(十二)之时间轴(Timeline)

本篇带来Alamofire中关于Timeline的一些思路 前言 Timeline翻译后的意思是时间轴,可以表示一个事件从开始到结束的时间节点。时间轴的概念能够应用在很多地方,比如说微博的主页就是一个时间...

马在路上
2017/04/05
0
0
深入理解Moya

前言 Moya是一个基于Alamofire开发的,轻量级的Swift网络层。Moya的可扩展性非常强,可以方便的RXSwift,PromiseKit和ObjectMapper结合。 如果你的项目刚刚搭建,并且是纯Swift的,非常推荐以...

黄文臣
2017/08/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题

输入命令解决即可 npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

千年典韦
29分钟前
10
0
测试jar 是否完整有错

cd WEB-INF/lib/for j in *.jar; do echo $j; jar tvf $j > /dev/null ; echo $j done; done

xiaodong16
33分钟前
19
0
ats02.

https://xdays.me/proxy%E6%9C%8D%E5%8A%A1%E5%99%A8-trafficserver%E5%9F%BA%E7%A1%80/ apache traffic server 简称ats 入坑(一)开始使用...

MtrS
34分钟前
19
0
Elasticsearch如何查询使用JSON字符串的DSL

背景 Java处理ES查询逻辑,有一种情况是用户从其他地方粘贴或者手动输入的JSON字符串的DSL语句;这个时候就没法使用QueryBuilder来构建所需要的SearchSource。查了查发现有个Wrapper的方式可...

叫我哀木涕
今天
19
0
JDBC:ResultSet Types

ResultSet Types 用于确定ResultSet的某些特征和功能。 ResultSet.TYPE_FORWARD_ONLY 只能调用 next,不能调用 previous 。否则报错 ResultSet.TYPE_SCROLL_INSENSITIVE 能调用 next/previou...

mrsuperli
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部