Alamofire网络库基础教程:使用 Alamofire 轻松实现 Swift 网络请求(一)

本文是Alamofire网络库的基础教程,通过实际操作教你如何使用Alamofire进行Swift网络请求,包括创建图片库应用、理解Alamofire重要组件、处理网络请求。文章还介绍了如何在项目中集成Alamofire,使用Alamofire发送网络请求,获取并解析JSON数据,以及如何创建自定义响应序列化方法,提升用户体验。
摘要由CSDN通过智能技术生成

alamofire.png

本章节由CocoaChina翻译组成员星夜暮晨(博客)翻译自raywenderlich:Beginning Alamofire Tutorial,敬请勘误。

AFNetworking是 iOS 和 OS X 上最受欢迎的第三方库之一。它曾在我们的2012年的读者评选中荣获2012年度最佳 iOS 库称号。它同样也在 Github 上面获得了14000多个 stars 和4000多个 forks,是使用最广的开源项目之一。

最近,AFNetworking 的作者Mattt Thompson提交了一个新的类似于 AFNetworking 的网络 基础库,并且是专门使用最新的 Swift 语言来编写的,名为:Alamofire

AFNetwork 的前缀 AF 是 Alamofire 的缩写,因此这个新的库名称其实是根据 Swift 的约定来进行命名的。

在本教程的第一部分中,我们将带领大家使用 Alamofire 来制作一个图片库应用,其来源是500px.com。在这个过程中,您可以学习到如何使用 Alamofire 中的重要组件,以及了解在应用中处理网络请求的某些重要的知识点。

本教程的第二部分将基于第一部分所制作的应用,并为其增加一些好用的功能。您可以通过这个过程学习到更多高级的 Alamofire 用法。

本教程假定您已熟悉 Swift 语言以及 iOS 开发。如果不是的话,请参阅我们的其他教程。还有,本教程使用 Xcode 6.1 作为开发环境(而不是 Xcode 6.2 beta)。

> 提示:如果您已经熟悉了 Alamofire 的基本用法,那么您可以直接跳到本文的第二部分。但是请确保您已拥有消费者密钥(cunsumer key),然后参照下文在应用中替换它。

让我们开始吧

首先下载本次教程的初始项目。这个项目中提供了在本教程中需要的全部 UI。这有助于您能够将注意力集中到学习 Alamofire 的使用上来,而不是花费大量时间来研究 UI。

在 Xcode 中打开这个项目,并跳转到Main.storyboard来:

11-700x338.png

我们应用的主屏幕使用UITabBarController这个常用的 UI 样式。我们的标签控制器中包含有两个标签,每个标签都有它们自己的UINavigationController页面。第一个标签让用户浏览热门图片。第二个标签让用户浏览他们已保存的文件。两个标签都使用`UICollectionViewController`来向用户展示图片。故事板中同样也包含了两个独立的视图控制器,在接下来的教程中我们将会用到它们。

生成并运行该应用,您首先会看到一个不停在加载的加载控件:

166.jpg

这看起来一点也不高端大气上档次……可以说没什么可看的。但是很快我们将会借助 Alamofire 来让他逼格高起来。

> 提示:如果您很熟悉 AFNetworking 的使用,那么您可能会觉得下一节我们将谈论 CocoaPods。但是就目前来说,还没有一个通过 CocoaPods 来整合 Swift 库的简单方法。

虽然说可能有人发现了该问题的解决方法,并将其上传到网上,但是下面的步骤仍然还是使用手动复制代码到项目中的这样一个可靠的方法。

要获取最新版本的 Alamofire,前往https://github.com/Alamofire/Alamofire然后单击网页右边的Download ZIP按钮。接着在 Finder 中打开起始项目文件夹,然后将Alamofire-master文件夹拖入到您的主项目文件夹中。

155.jpg

打开Alamofire-master文件夹(现在它位于您的项目文件夹中),然后将Alamofire.xcodeprij文件(注意是蓝色图标!不是白色图标!)直接拖进 Xcode 中的 Photomania 项目下面,如下图所示:

166.jpg

接下来,单击Photomania项目,进入General窗口。滚动到Embedded Binaries项,然后单击其下方的 + 号。选择Alamofire.framework,最后点击Add完成添加。

144.jpg

生成并运行您的项目以确保没有任何错误出现,然后就可以进入到下一节内容了。

使用 Alamofire 来检索数据

您可能会觉得,为什么我们要使用 Alamofire 呢?明明苹果已经提供了NSURLSession类以及其相关类,以便让我们通过 HTTP 来下载相应内容。为什么我们还要使用第三方库来让这件事情变得复杂呢?

简单来说,Alamofire 其实是基于`NSURLSession`的,但是它可以免去您写样板(boilerplate)代码的麻烦,并且可以让网络模块的代码更为简单易用。您可以通过一些非常简单的操作来访问 Internet 上的数据,并且写出来的代码也会更加清晰明了、简单易读。

要使用 Alamofire 的话,首先需要导入它。请打开PhotoBrowserCollectionViewController.swift文件,然后在文件顶部添加如下代码:

1
import Alamofire

您需要在每个使用了 Alamofire 类以及函数的文件中添加这条`import`语句。

接下来,在`setupView()`下方的`viewDidLoad()`方法中添加如下代码:

1
2
3
4
Alamofire.request(.GET,  "https://api.500px.com/v1/photos" ).responseJSON() {
   (_, _, data, _)  in
   println(data)
}

过会儿我会对其做出详细解释,但是首先您需要生成并运行该应用,这个时候您会在控制台中看到如下信息:

1
2
3
4
Optional({
     error =  "Consumer key missing." ;
     status = 401;
})

您可能不明白它说了什么鬼,不过您已经成功地使用 Alamofire 来实现网络请求了!您向 Internet 上的资源发出了一个请求,然后返回了一个JSON 数据。

下面来解释一下那些代码到底做了些什么:

· Alamofire.request(_:_)接收两个参数:method和URLString。其中,method 通常是.GET、.POST;URLString通常是您想要访问的内容的 URL。其将返回一个Alamofire.Request对象。

· 通常情况下,您只需将请求对象链接到响应方法上。例如,在上面的代码中,请求对象简单地调用了responseJSON()方法。当网络请求完毕后,responseJSON()方法会调用我们所提供的闭包。在我们的示例中,我们只是简单的将经过解析的 JSON 输出到控制台中。

· 调用responseJSON方法意味着您期望获得一个 JSON 数据。在我们的示例中,Alamofire 试图解析响应数据并返回一个 JSON 对象。或者,您可以使用responsePropertyList来请求获得一个属性列表,也可以使用responseString来请求获得一个初始字符串。在本教程后面,您将了解更多关于响应序列化方法的使用方式。

您可以从控制台中看到输出的响应数据,服务器报告您需要一个名为consumer key的东西。在我们继续使用 Alamofire 之前,我们需要从 500px 网站的 API 中获取一个密钥。

获取消费者密钥

前往https://500px.com/signup,然后使用您的邮箱免费注册,或者使用您的 Facebook 、Twitter 或者 Google 帐号登录。

一旦您完成了注册流程,那么前往https://500px.com/settings/applications并单击"Register your application"。

您会看到如下所示的对话框:

133.jpg

红色大箭头指向的那些文本框里面的内容都是必填的。使用Alamofire Tutorial作为Application Name,然后使用iOS App作为Description。目前您的应用还没有Application URL,但是您可以随意输一个有效的网址来完成应用注册,您可以使用raywenderlich.com^_^。

最后,在Developer’s Email中输入您的邮箱地址,然后单击复选框来接受使用协议。

接着,单击 Register按钮,您会看到一个如下所示的框:

122.jpg

单击See application details链接,然后它会弹出详细信息,这时候您就可以定义您的消费者密钥了,如下所示:

111.jpg

从该页面中复制出您的消费者密钥,然后返回 Xcode,然后用如下代码替换掉目前为止您唯一添加的代码:

1
2
3
4
Alamofire.request(.GET,  "https://api.500px.com/v1/photos" , parameters: [ "consumer_key" "PASTE_YOUR_CONSUMER_KEY_HERE" ]).responseJSON() {
   (_, _, JSON, _)  in
   println(JSON)
}

请确保您已经用复制的消费者密钥来替换掉PASTE_YOUR_CONSUMER_KEY_HERE。

生成并运行您的应用,这时您会在控制台中看见海量的输出:

100.jpg

上述所有的输出意味着您成功地下载到了含有一些照片信息的 JSON。

JSON 数据中包含了一些图片集的属性、一些页面信息,以及一个图片数组。这里是我得到的搜索结果(您的可能会略有不同):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值