xcode alamofire 4.0 swift3引包放在哪

Swift HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)-ios7教程-手机开发-壹聚教程网Swift HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
本文章来为各位介绍一篇关于Swift HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)实例,希望对各位有帮助.
一,Alamofire的说明与配置
1,什么是Alamofire
(1)Alamofire&的前身是&AFNetworking。AFNetworking&是&iOS&和&OS X&上很受欢迎的第三方HTTP网络基础库。
(2)其实&AFNetwork&的前缀&AF&便是&Alamofire&的缩写。
(3)Swift发布后,AFNetworking的作者又用Swift语言写了个相同功能的库,这便是&Alamofire。
(4)Alamofire&本质是基于`NSURLSession`,并做了封装。使用&Alamofire&可以让我们网络请求相关代码(如获取数据,提交数据,上传文件,下载文件等)更加简洁易用。&
2,Alamofire的功能特性:
(1)链式的请求/响应方法
(2)URL / JSON / plist参数编码
(3)上传类型支持:文件(File&)、数据(Data&)、流(Stream)以及MultipartFormData
(4)支持,下载支持断点续传
(5)支持使用NSURLCredential进行身份验证
(6)HTTP响应验证
(7)TLS Certificate and Public Key Pinning
(8)Progress Closure & NSProgress
3,Alamofire的安装与配置
(1)从&GitHub&上下载最新的代码:htt:///Alamofire/Alamofire
(2)将下载下来的源码包中&Alamofire.xcodeproj&拖拽至你的工程中
(3)工程 -&&General&-&&Embedded Binaries项,增加&Alamofire.framework
(4)最后,在需要使用&Alamofire&的地方&import&进来就可以了
import Alamofire
二,使用Alamofire进行数据请求
1,以GET请求为例
(1)不带参数,不带结果处理
Alamofire.(.GET, &https://httpbin.org/get&)
(2)带参数,不带结果处理
Alamofire.request(.GET, &https://httpbin.org/get&, parameters: [&foo&: &bar&])
(3)带参数,也带结果处理(这里以返回结果为json格式的为例)
Alamofire.request(.GET, &https://httpbin.org/get&, parameters: [&foo&: &bar&])
&&&&&&&&&.responseJSON { response in
&&&&&&&&&&&&&print(response.request)& // original URL request
&&&&&&&&&&&&&print(response.response) // URL response
&&&&&&&&&&&&&print(response.data)&&&& // server data
&&&&&&&&&&&&&print(response.result)&& // result of response serialization
&&&&&&&&&&&&&if let JSON = response.result.value {
&&&&&&&&&&&&&&&&&print(&JSON: \(JSON)&)
&&&&&&&&&&&&&}
&&&&&&&&&}
2,响应处理(Response Handling)
(1)除了上面样例使用的responseJSON(处理json类型的返回结果)外,Alamofire还提供了许多其他类型的响应处理方法:
response()
responseData()
responseString(encoding: NSStringEncoding)
responseJSON(options: NSJSONReadingOptions)
responsePropertyList(options: NSPropertyListReadOptions)
(2)Response Handler
Alamofire.request(.GET, &https://httpbin.org/get&, parameters: [&foo&: &bar&])
&&&&&&&& .response { request, response, data, error in
&&&&&&&&&&&& print(request)
&&&&&&&&&&&& print(response)
&&&&&&&&&&&& print(data)
&&&&&&&&&&&& print(error)
&&&&&&&&& }
(3)Response Data Handler
Alamofire.request(.GET, &https://httpbin.org/get&, parameters: [&foo&: &bar&])
&&&&&&&& .responseData { response in
&&&&&&&&&&&& print(response.request)
&&&&&&&&&&&& print(response.response)
&&&&&&&&&&&& print(response.result)
&&&&&&&&& }
(4)Response String Handler
Alamofire.request(.GET, &https://httpbin.org/get&)
&&&&&&&& .responseString { response in
&&&&&&&&&&&& print(&Success: \(response.result.isSuccess)&)
&&&&&&&&&&&& print(&Response String: \(response.result.value)&)
&&&&&&&& }
(5)Response JSON Handler
Alamofire.request(.GET, &https://httpbin.org/get&)
&&&&&&&& .responseJSON { response in
&&&&&&&&&&&& debugPrint(response)
&&&&&&&& }
(6)同样也支持链式的返回结果处理
Alamofire.request(.GET, &https://httpbin.org/get&)
&&&&&&&& .responseString { response in
&&&&&&&&&&&& print(&Response String: \(response.result.value)&)
&&&&&&&& }
&&&&&&&& .responseJSON { response in
&&&&&&&&&&&& print(&Response JSON: \(response.result.value)&)
&&&&&&&& }
3,请求类型(HTTP Methods)
除了上面使用的 .Get 类型。Alamofire还定义了许多其他的HTTP 方法(HTTP Medthods)可以使用。
public enum Method: String {
&&& case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT
比如要使用 POST 请求,把 Alamofire.request 第一个参数做修改即可:
Alamofire.request(.POST, &http://httpbin.org/post&)
4,请求参数(Parameters)
(1)使用GET类型请求的时候,参数会自动拼接在url后面
Alamofire.request(.GET, &https://httpbin.org/get&, parameters: [&foo&: &bar&])
// https://httpbin.org/get?foo=bar
(2)使用POST类型请求的时候,参数是放在在HTTP body里传递,url上看不到
let parameters = [
&&& &foo&: &bar&,
&&& &baz&: [&a&, 1],
&&& &qux&: [
&&&&&&& &x&: 1,
&&&&&&& &y&: 2,
&&&&&&& &z&: 3
Alamofire.request(.POST, &https://httpbin.org/post&, parameters: parameters)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
5,参数编码方式(Parameter Encoding)
除了默认的方式外,Alamofire还支持URL、URLEncodedInURL、JSON、Property List以及自定义格式方式编码参数。
enum ParameterEncoding {
&&& case URL
&&& case URLEncodedInURL
&&& case JSON
&&& case PropertyList(format: NSPropertyListFormat, options: NSPropertyListWriteOptions)
&&& case Custom((URLRequestConvertible, [String: AnyObject]?) -& (NSMutableURLRequest, NSError?))
&&& func encode(request: NSURLRequest, parameters: [String: AnyObject]?) -& (NSURLRequest, NSError?)
&&& { ... }
比如我们想要把一个字典类型的数据,使用json格式发起POST请求:
let parameters = [
&&& &foo&: [1,2,3],
&&& &bar&: [
&&&&&&& &baz&: &qux&
Alamofire.request(.POST, &https://httpbin.org/post&, parameters: parameters, encoding: .JSON)
// HTTP body: {&foo&: [1, 2, 3], &bar&: {&baz&: &qux&}}
6,支持自定义Http头信息(HTTP Headers)
let headers = [
&&& &Authorization&: &Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==&,
&&& &Content-Type&: &application/x-www-form-urlencoded&
Alamofire.request(.GET, &https://httpbin.org/get&, headers: headers)
&&&&&&&& .responseJSON { response in
&&&&&&&&&&&& debugPrint(response)
&&&&&&&& }
名称:大小:9.96MM下载:
上一页: &&&&&下一页:相关内容[Xcode7.2]CocoaPods安装和使用教程—Alamofire_Aileen_新浪博客
[Xcode7.2]CocoaPods安装和使用教程—Alamofire
CocoaPods是什么?
当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。总之小编的意思就是,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。如果能有什么工具能解决这些恼人的问题,那将“善莫大焉”。所以,你需要
CocoaPods。
CocoaPods应该是iOS最常用最有名的类库管理工具了,上述两个烦人的问题,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了。
如何下载和安装CocoaPods?
在安装CocoaPods之前,首先要在本地安装好Ruby环境。至于如何在Mac中安装好Ruby环境,请google一下,本文不再涉及。
假如你在本地已经安装好Ruby环境,那么下载和安装CocoaPods将十分简单,只需要一行命令。在Terminator(也就是终端)中输入以下命令.
sudo gem install cocoapods
但是,且慢。如果你在天朝,在终端中敲入这个命令之后,会发现半天没有任何反应。原因无他,因为那堵墙阻挡了cocoapods.org。但是,我们可以用淘宝的Ruby镜像来访问cocoapods。
按照下面的顺序在终端中敲入依次敲入命令:
1.移除现有Ruby默认源(复制粘贴代码时,不要复制前面的$)
​$ gem sources --remove https://rubygems.org/
//等有反应之后再敲入以下命令
2.使用新的源$ gem sources -a http://ruby.taobao.org/
为了验证你的Ruby镜像是并且仅是taobao,可以用以下命令查看:
3.验证新源是否替换成功
$ gem sources -l
只有在终端中出现下面文字才表明你上面的命令是成功的:
*** CURRENT SOURCES ***
http://ruby.taobao.org/
4.安装CocoaPods
(1)&&$sudo
gem install cocoa pods&
​备注:苹果系统升级&OS
X EL Capitan&后改为
​$ sudo gem install -n
/usr/local/bin&cocoa pods
等上十几秒钟,CocoaPods就可以在你本地下载并且安装好了,不再需要其他设置。
如果gem太老,可以用如下命令升级gem:
$ sudo gem update —system
如何使用CocoaPods?
好了,安装好CocoPods之后,接下来就是使用它。所幸,使用CocoPods和安装它一样简单,也是通过一两行命令就可以搞定。
小编在这里用两种使用场景来具体说明如何使用CocoaPods。
场景1:利用CocoaPods,在项目中导入Alamofire类库
AFNetworking类库在GitHub地址是:
为了确定Alamofire是否支持CocoaPods,可以用CocoaPods的搜索功能验证一下。在终端中输入:
$ pod search Alamofire
过几秒钟之后,你会在终端中看到关于Alamofire类库的一些信息。
这说明,Alamofire是支持CocoaPods,所以我们可以利用CocoaPods将Alamofire导入你的项目中。
首先,我们需要在我们的项目中加入CocoaPods的支持。先利用Xcode创建一个名字CocoaPodsDemo的项目,用于以下的教程。
你看到这里也许会问,CocoaPods为什么能下载Alamofire呢,而不是下载其他类库呢?这个问题的答案是,有个文件来控制CocoaPods该下载什么。这个文件就叫做“Podfile”(注意,一定得是这个文件名,而且没有后缀)。你创建一个Podfile文件,然后在里面添加你需要下载的类库,也就是告诉CocoaPods,“某某和某某和某某某,快到碗里来!”。每个项目只需要一个Podfile文件。
下载Alamofire的步骤:
1.在终端中进入你项目所在目录。
比如你的项目是在桌面的HousekeepingClient文件夹里,那命令行就是:(注意cd后的空格)
/Users/zhang/Desktop/HousekeepingClient/​
2.在当前目录下,利用vim创建Podfile,运行:
$ vim Podfile​
Podfile之后的画面(Podfile文件)
如果画面是这个,说明已经创建了该文件,输入E,进行编辑即可
​3.然后在Podfile文件中输入以下文字:(最好是复制Alamofire的github页面的这段命令行)
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire', '~& 3.0'
备注:这两句文字的意思是,当前Alamofire支持的iOS最高版本是iOS
要下载的Alamofire版本是3.0。​可以在Alamofire的github页面找到:
4.点击control+C,输入
(vim环境下的保存退出命令)
​按下enter键,画面跳转到下图(说明保存退出成功)
这时候,你会发现你的项目目录中,出现一个名字为Podfile的文件,而且文件内容就是你刚刚输入的内容。注意,Podfile文件应该和你的工程文件.xcodeproj在同一个目录下。
然后,就可以利用CocoPods下载Alamofire类库了。
还是在终端中的当前项目目录下,运行以下命令:
$ pod install
因为是在你的项目中导入Alamofire,这就是为什么这个命令需要你进入你的项目所在目录中运行。
耐心等待一会~~~~~~~~~~~~~~(导入成功啦啦啦啦)
​注意这段话:[!] Please close
any current Xcode sessions and use `test.xcworkspace` for
this project from now on.
意思是:以后打开项目就用 .xcworkspace
打开,而不是之前的.xcodeproj文件。​
现在,你就可以开始使用Alamofire啦。可以稍微测试一下,在你的项目任意代码文件中输入:​import
假如安装的第三方库的头文件不能引入。需要更改TARGETS ---&Build
Settings --&User Header Search
Paths 添加${SRCROOT}即可。
参考博文:
博客等级:
博客积分:0
博客访问:3,598
关注人气:0
荣誉徽章:> 啪神的博客详情
摘要: 之前网上搜到的Alamofire是1.3版本的。所以安装到Xcode7.1下会报错,所以整理了Alamofire3.1版本用CocoaPods安装。方便大家使用。
&&&&由于之前网上搜到的Alamofire是1.3版本的。所以安装到Xcode7.1下会报错,所以整理了Alamofire3.1版本用cocoapods安装。方便大家使用。本文适合CocoaPods新手。
& 在已经安装了CocoaPods的前提下,cd项目所在目录,创建Podfile文件
touch&Podfile
然后编辑Podfile文件
open&-e&Podfile
在打开的Podfile文本编辑器里输入
source '/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '&Your Target Name&' do
pod 'Alamofire', '~& 4.0'
pod&install
至此Alamofire被CocoaPods安装下来了。
如果想更改或者添加其他的第三方类库。直接
open&-e&Podfile
在文本里添加或者删除对于的类库,然后
pod&update
如果 pod update 一直停顿,那么换这个方法
pod&install&--verbose&--no-repo-update
注:如果安装成功,打开.xcworkspace文件。&
假如安装的第三方库的头文件不能引入。需要更改TARGETS ---&Build Settings --&User Header Search Paths 添加${SRCROOT}即可
人打赏支持
码字总数 4212
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区主题 : 新手求助&&Alamofire3.3.1+xcode 7.3 编译报错
级别: 新手上路
可可豆: 11 CB
威望: 11 点
在线时间: 9(时)
发自: Web Page
来源于&&分类
新手求助&&Alamofire3.3.1+xcode 7.3 编译报错&&&
以前没从试过ios 开发,近期打算学习但是在用alamofire 中 用pod导入发现manager.swift.报错,以为是xcode 版本问题更换了 7.1.1  7.2.1  都不好用麻烦能帮我下么。。多谢报错内容如下
图片:EFF0CE0F-A89F-56B16C8D45.png
级别: 新手上路
可可豆: 11 CB
威望: 11 点
在线时间: 9(时)
发自: Web Page
多谢各位帮忙 ,先谢过
级别: 新手上路
UID: 455640
可可豆: 67 CB
威望: 50 点
在线时间: 277(时)
发自: Web Page
#selector 是Swift2.2后才有的,你Xcode确定是7.3的么?
级别: 新手上路
可可豆: 14 CB
威望: 14 点
在线时间: 51(时)
发自: Web Page
楼主解决了没??
级别: 新手上路
可可豆: 14 CB
威望: 14 点
在线时间: 51(时)
发自: Web Page
跟楼主遇到了同样的问题,如果解决了请回复一下,谢谢。
级别: 新手上路
可可豆: 1 CB
威望: 1 点
在线时间: 1(时)
发自: Web Page
把 pod 改成&&&&pod 'Alamofire', '~& 3.0'
级别: 新手上路
可可豆: 4 CB
威望: 4 点
在线时间: 0(时)
发自: Web Page
我也遇到了同样的问题,我是安装alamofire 3.4.1出现的,因为之前安装其他低版本的没问题,所以我想应该是xcode没有更新的原因。然后我更新xcode到7.3.1就ok了
级别: 新手上路
可可豆: 23 CB
威望: 13 点
在线时间: 242(时)
发自: Web Page
请问楼主解决了吗 ? 我Xcode版本8.0 使用cocoaPod导入Alamofire 编译报错。
级别: 侠客
可可豆: 82 CB
威望: 82 点
在线时间: 75(时)
发自: Web Page
去快答提问看看,快问快答~
图片:CVP平台微信公众号二维码.png
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版当前位置:
& Swift - HTTP网络操作库Alamofire使用详解3(文件下载,断点续传)
Swift - HTTP网络操作库Alamofire使用详解3(文件下载,断点续传)
发布:hangge
阅读:3651
相关文章系列:(文章代码均已升级至Swift3)
[当前文章] Swift - HTTP网络操作库Alamofire使用详解3(文件下载,断点续传)
七,使用Alamofire进行文件下载
1,自定义下载文件的保存目录
下面代码将logo图片下载下来保存到用户文档目录下(Documnets目录),文件名不变。
//指定下载路径(文件名不变)
let destination: DownloadRequest.DownloadFileDestination = { _, response in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent(response.suggestedFilename!)
//两个参数表示如果有同名文件则会覆盖,如果路径中文件夹不存在则会自动创建
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
//开始下载
Alamofire.download("/blog/images/logo.png", to: destination)
.response { response in
print(response)
if let imagePath = response.destinationURL?.path {
let image = UIImage(contentsOfFile: imagePath)
将logo图片下载下来保存到用户文档目录下的file1子目录(Documnets/file1目录),文件名改成myLogo.png。
//指定下载路径和保存文件名
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent("file1/myLogo.png")
//两个参数表示如果有同名文件则会覆盖,如果路径中文件夹不存在则会自动创建
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
//开始下载
Alamofire.download("/blog/images/logo.png", to: destination)
.response { response in
print(response)
if let imagePath = response.destinationURL?.path {
let image = UIImage(contentsOfFile: imagePath)
2,使用默认提供的下载路径
Alamofire内置的许多常用的下载路径方便我们使用,简化代码。注意的是,使用这种方式如果下载路径下有同名文件,不会覆盖原来的文件。
比如,下载到用户文档目录下可以改成:
let destination = DownloadRequest.suggestedDownloadDestination(for: .documentDirectory)
Alamofire.download("/blog/images/logo.png", to: destination)
3,下载进度
(1)下面代码在文件下载过程中会不断地打印下载进度,同时下载完成后也会打印完成信息。
Alamofire.download("/favicon.ico", to: destination)
.downloadProgress { progress in
print("当前进度: \(progress.fractionCompleted)")
.responseData { response in
if let data = response.result.value {
print("下载完毕!")
let image = UIImage(data: data)
(2)下载的过程中我们也可以得到已下载部分的大小,以及文件总大小。(单位都是字节)
Alamofire.download("/favicon.ico", to: destination)
.downloadProgress { progress in
print("已下载:\(pletedUnitCount/1024)KB")
print("总大小:\(progress.totalUnitCount/1024)KB")
.responseData { response in
if let data = response.result.value {
print("下载完毕!")
let image = UIImage(data: data)
4,断点续传(Resume Data)&
当下载过程中被意外停止时,可以在响应方法中把已下载的部分保存起来,下次再从断点继续下载。
下面通过样例演示如何断点续传:
(1)程序启动后自动开始下载文件
(2)点击“停止下载”,终止下载并把已下载的数据保存起来,进度条停止走动。
(3)点击“继续下载”,从上次终止的地方继续下载,进度条继续走动。
import UIKit
import Alamofire
class ViewController: UIViewController {
//停止下载按钮
@IBOutlet weak var stopBtn: UIButton!
//继续下载按钮
@IBOutlet weak var continueBtn: UIButton!
//下载进度条
@IBOutlet weak var progress: UIProgressView!
//下载文件的保存路径(
var destination:DownloadRequest.DownloadFileDestination!
//用于停止下载时,保存已下载的部分
var cancelledData: Data?
//下载请求对象
var downloadRequest: DownloadRequest!
override func viewDidLoad() {
super.viewDidLoad()
//设置下载路径。保存到用户文档目录,文件名不变,如果有同名文件则会覆盖
self.destination = { _, response in
let documentsURL = FileManager.default.urls(for: .documentDirectory,
in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent(response.suggestedFilename!)
//两个参数表示如果有同名文件则会覆盖,如果路径中文件夹不存在则会自动创建
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
//页面加载完毕就自动开始下载
self.downloadRequest =
Alamofire.download(
"/qqfile/qq/QQ7.9/16621/QQ7.9.exe", to: destination)
self.downloadRequest.downloadProgress(queue: DispatchQueue.main,
closure: downloadProgress) //下载进度
self.downloadRequest.responseData(completionHandler: downloadResponse) //下载停止响应
//下载过程中改变进度条
func downloadProgress(progress: Progress) {
//进度条更新
self.progress.setProgress(Float(progress.fractionCompleted), animated:true)
print("当前进度:\(progress.fractionCompleted*100)%")
//下载停止响应(不管成功或者失败)
func downloadResponse(response: DownloadResponse&Data&) {
switch response.result {
case .success(let data):
//self.image = UIImage(data: data)
print("文件下载完毕: \(response)")
case .failure:
self.cancelledData = response.resumeData //意外终止的话,把已下载的数据储存起来
//停止按钮点击
@IBAction func stopBtnClick(_ sender: AnyObject) {
self.downloadRequest?.cancel()
self.stopBtn.isEnabled = false
self.continueBtn.isEnabled = true
//继续按钮点击
@IBAction func continueBtnClick(_ sender: AnyObject) {
if let cancelledData = self.cancelledData {
self.downloadRequest = Alamofire.download(resumingWith: cancelledData,
to: destination)
self.downloadRequest.downloadProgress(queue: DispatchQueue.main,
closure: downloadProgress) //下载进度
self.downloadRequest.responseData(completionHandler: downloadResponse) //下载停止响应
self.stopBtn.isEnabled = true
self.continueBtn.isEnabled = false
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
源码下载:
( Swift3最新版)
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作。

我要回帖

更多关于 xcode8 alamofire 4 的文章

 

随机推荐