Alamofire网络库进阶教程

上传人:M****1 文档编号:508424275 上传时间:2022-08-31 格式:DOCX 页数:26 大小:24.17KB
返回 下载 相关 举报
Alamofire网络库进阶教程_第1页
第1页 / 共26页
Alamofire网络库进阶教程_第2页
第2页 / 共26页
Alamofire网络库进阶教程_第3页
第3页 / 共26页
Alamofire网络库进阶教程_第4页
第4页 / 共26页
Alamofire网络库进阶教程_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《Alamofire网络库进阶教程》由会员分享,可在线阅读,更多相关《Alamofire网络库进阶教程(26页珍藏版)》请在金锄头文库上搜索。

1、本章节由CocoaChina翻译组成员星夜暮 晨(博客)翻译自 raywenderlich:Intermediate Alamofire Tutorial,敬请勘误。欢迎回到我们的Alamofire网络库使 用教程,本文是此教程的第二部分,同 时也是最后一个部分。在教程的第一部分中,我们学习了 Alamofire的一些基本用法,比如说发送 GET请求、传递参数、创建请求路由以 及创建自定义响应序列化方法。在学习 的过程中,我们也生成了一个很赞的名 为Photomania的图片库应用。在本教 程的第二部分,您将会增加以下功能:照片查看器查看评论以及其他信息的功能下载照片功能,附带有一个圆列进度条

2、 优化网络访问以及图片缓存下拉刷新操作让我们开始吧您可以使用您在教程第一部分所完成 的项目来开始本章教程。但是如果您跳 过了第一部分的教程或者对自己的项目 没有信心的话,那么您也可以使用我们 提供的标准项目。提示:如果您跳过了第一部分的教程,那么请 不要忘记您首先应当从 网 站上获取消费者密钥,然后在 Five100px.swift中用其替换必要的部分。 关于如何获取该密钥,以及在何处使用 它,都在本教程的第一部分:Alamofire 网络库基础教程中有详细说明。生成并运行起始项目,以确定我们应用 运行正常。图片预览功能能够正常工作, 但是单击图片并不会将其以全屏打开。 这就是我们所要解决的问

3、题!创建图片查看器说句老实话,范型可以说是包括Swift 在内的高级编程语言中最强大的特性之 一。一般情况下,在我们这个项目中最 好使用范型这个功能。打开Five100px.swift,然后在文件顶部, 即import Alamofire语句下方添加以下代码:objcpublicprotocolResponseObjectSeri alizableinit(response:NSHTTPURLRespons e,representation:AnyObject)extensionAla mofire.RequestpublicfuncresponseObject (completionHand

4、ler:(NSURLRequest,NSHT TPURLResponse?,T?,NSError?)-Void)-Sel fletserializer:Serializer=(request,respons e,data)inletJSONSerializer=Request.JSONR esponseSerializer(options:.AllowFragment s)let(JSON:AnyObject?,serializationError)= JSONSerializer(request,response,data)ifres ponse!=nil&JSON!=nilreturn(T

5、(response :response!,representation:JSON!),nil)else return(nil,serializationError)returnrespo nse(serializer:serializer,completionHandler :(request,response,object,error)incomple tionHandler(request,response,objectas?T, error)在上述的代码中,我们再一次给 Alamofire创建了一个扩展,添加了新的 响应序列化方法。这次,我们添加 了responseObject()函数。

6、作为一个通用 函数,它能够序列化所有符合 ResponseObjectSerializable 协议的数据对 象。这意味着,如果我们定义一个含有 init(response:representation:)初始化方法 的新类,那么Alamofire就能够自行从 服务器返回该类型的对象。这时候,我 们已经将序列化逻辑封装进了自定义类 的内部。哈哈,是不是一个很赞的面向 对象设计?图片查看器使用的是PhotoInfo类,这 个类遵守 了 ResponseObjectSerializable 协议,并实现了所需的方法。不过您仍 需要让这个类正式遵守 ResponseObjectSerializabl

7、e 协议。打开Five100px.swift,并且修改 PhotoInfo类的声明来让其明确遵守 ResponseObjectSerializable 协议,如下所 示:classPhotoInfo:NSObject,ResponseObject Serializable 提示:虽然毋需详细了解representation参数在PhotoInfo对象中是如何序列化的,但 是感兴趣的读者可以去浏览requiredinit(response:representation:)方法来了解 其工作原理。打开 PhotoViewerViewController.swift,注意不是PhotoBrowser

8、CollectionViewController.swift,然后在文件顶部加入一个必要的导 入声明:importAlamofire 接着,在 viewDidLoad() 方法内的底部加入以下代码:loadPhoto()您会得到一个找不到 loadPhoto()的错误,但是不必担心,我们 接下来就要实现这个函数。仍然是在同一个文件当中,在 setupView()方法前加入以下代码:funcloadPhoto()Alamofire.request(Five1 00px.Router.PhotoInfo(self.photoID,Large) ).validate().responseObject

9、()(_,_,photoInf o:PhotoInfo?,error)iniferror=nilself.photoInfo=photoInfodispatch_async(dispatch_ get_main_queue()self.addButtomBar()self.title=photoInfo!.nameAlamofire.request(.GET,photoInfo!.url).validate().responseI mage!=nilself.imageView.image=imagesel f.imageView.frame=self.centerFrameFromI mag

10、e(image)self.spinner.stopAnimating()s elf.centerScrollViewContents()这时, 我们在其他Alamofire请求的完成处理 方法中发出了 Alamofire请求。第一个 请求接收到了一个JSON响应数据,然 后它使用我们新建的通用响应序列化方 法,在JSON数据之外创建了一个 PhotoInfo 实例。mage()(_,_,image,error)iniferror=nilSelfextensionAlamofire.Reque stpublicfuncresponseCollection(completi onHandler:(

11、NSURLRequest,NSHTTPURLRe sponse?,T?,NSError?)-Void)-Selfletserializer:Serializer=(request,response,data)i nletJSONSerializer=Request.JSONRespons eSerializer(options:.AllowFragments)let(JSON:AnyObject?,serializationError)=JSONSe rializer(request,response,data)ifresponse!=nil&JSON!=nilreturn(T.collect

12、ion(respo nse:response!,representation:JSON!),nil)elsereturn(nil,serializationError)returnres ponse(serializer:serializer,completionHand ler:(request,response,object,error)incom pletionHandler(request,response,objectas ?T,error)这段代码看起来很眼熟,它 和我们之前创建的通用响应序列化方法 相似。唯一的不同点是,这个协议定义了返回 集合的一个类方法(而不是单个元素)。 完成处理方法将集合作为其第三个参 数,即T,接着调用类型上的collection 而不是调用初始化方法。仍然是在同一个文件当中,将整个 Comment类替换为以下形式:finalclassComment:ResponseCollectionS erializableclassfunccollection(#response:NSHTTPURLRespons

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号