Swift Alamofire

转载:https://www.jianshu.com/p/07b1ec36a689 最近AFNetworking的作者Matt Thompson 提出了一个新的类似AFNetworking的网络基础库,并且专门使用最新的Swift语言写的,名为 Alamofire.

一、正常导入,CocoaPods

1-1、注意下CocoaPods版本

gem install cocoapods

CocoaPods 0.39.0+ is required to build Alamofire 3.0.0+.

1-2、vim Podfile

  platform :ios, '8.0'
  use_frameworks!
  pod 'Alamofire' 
  //然后 pod install 就OK了 
1-3、导入Alamfire 就可以正常使用了

  import Alamofire 
注意目前可能会出现这个警告;Cannot load underlying module for 'Alamofire',可以先忽略它,直接 build就没了

二、基本使用

GET请求

普通的get请求

 下面是一个天气预报的请求,时间久了,key 会失效
 let parameters:Dictionary = ["key":"93c921ea8b0348af8e8e7a6a273c41bd"]
    Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: parameters)
        .responseJSON { response in

            print("result==\(response.result)")   // 返回结果,是否成功
            if let jsonValue = response.result.value {
                /*
                error_code = 0
                reason = ""
                result = 数组套字典的城市列表
                */
                print("code: \(jsonValue["error_code"])")
            }
    }
     /*
    result==SUCCESS
    code: Optional(0)
    */

带head的get请求

 let headers = ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"]
 Alamofire.request(.GET, "http://apis.baidu.com/heweather/pro/weather?city=beijing", headers: headers)
        .responseJSON { response in
            print("result==\(response.result)")
            if let jsonValue = response.result.value {
                
                print("weNeedReuslt ==  \(jsonValue)")
            }
  
   }
POST 请求

先看看Alamofire 定义了许多其他的HTTP 方法(HTTP Medthods)可以使用。

public enum Method: String {
case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT
}

使用GET类型请求的时候,参数会自动拼接在url后面,使用POST类型请求的时候,参数是放在在HTTP body里传递,url上看不到的

let parameters:Dictionary = ["key":"93c921ea8b0348af8e8e7a6a273c41bd"]
Alamofire.request(.POST, "http://apis.haoservice.com/weather/city", parameters: parameters)
        .responseJSON { response in
            
            print("result==\(response.result)")   // 返回结果,是否成功
            if let jsonValue = response.result.value {
                /*
                error_code = 0
                reason = ""
                result = 数组套字典的城市列表
                */
                print("code: \(jsonValue)")
            }
 }

至于加header的post 请求,实际上也是GET 一样的

注意点1: 参数编码方式

除了默认的方式外,Alamofire还支持URL、URLEncodedInURL、JSON、Property List以及自定义格式方式编码参数。

public enum ParameterEncoding {
      case URL
      case URLEncodedInURL
      case JSON
      case PropertyList(NSPropertyListFormat, NSPropertyListWriteOptions)
      case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?))
}

//想要把一个字典类型的数据,使用json格式发起POST请求

 let parameters = [
        "one": [1,2,3],
        "two": ["apple": "pig"]
    ]
    
 Alamofire.request(.POST, "http://www.example.com/service", parameters: parameters, encoding: .JSON)
注意点2:validate()

将其与请求和响应链接,以确认响应的状态码在默认可接受的范围(200到299)内。如果认证失败,响应处理方法将出现一个相关错误,我们可以根据不同在完成处理方法中处理这个错误。比如下面的样例,成功时会打印成功信息,失败时输出具体错误信息。

 Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"])
        .validate()
        .responseJSON { response in
            switch response.result {
            case .Success:
                print("数据获取成功!")
            case .Failure(let error):
                print(error)
            }
    }
注意点3:响应处理方法

观察上面几个请求,我都是使用样例的responseJSON(处理json类型的返回结果)外,Alamofire还提供了许多其他类型的响应处理方法:

response()
responseData()
responseString(encoding: NSStringEncoding)
responseJSON(options: NSJSONReadingOptions)
responsePropertyList(options: NSPropertyListReadOptions)

我们可以根据我的实际情况,选择自己需要的。

例如 responseData()
 Alamofire.request(.GET, "http://apis.haoservice.com/weather/city", parameters: ["apikey":"a566eb03378211f7dc9ff15ca78c2d93"])
        .responseData { response in
            print(response.request)
            print(response.response)
            print(response.result)
    }

暂时基本使用,总结到此,持续更新中····⛽️

备注参考

https://github.com/Alamofire/Alamofire http://www.hangge.com/blog/cache/detail_970.html http://www.cnblogs.com/iCocos/p/4550570.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逆向技术

x64内核HOOK技术之拦截进程.拦截线程.拦截模块

            x64内核HOOK技术之拦截进程.拦截线程.拦截模块 一丶为什么讲解HOOK技术. 在32系统下, 例如我们要HOOK SSDT表,那么...

4737
来自专栏Linux驱动

第1阶段——uboot分析之启动函数bootm命令 (9)

本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0" 中...

2539
来自专栏ACM小冰成长之路

HDU-3237-Help Bubu

ACM模版 描述 ? 题解 image.png 代码 #include <cstdio> #include <algorithm> #include <cstr...

2047
来自专栏Star先生的专栏

从源码中分析 Hadoop 的 RPC 机制

RPC是Remote Procedure Call(远程过程调用)的简称,这一机制都要面对两个问题:对象调用方式余与序列/反序列化机制。本文给大家介绍从源码中分...

6290
来自专栏比原链

剥开比原看代码02:比原启动后去哪里连接别的节点

Gitee地址:https://gitee.com/BytomBlockchain/bytom

1172
来自专栏JetpropelledSnake

SNMP学习笔记之SNMP4J介绍(Java)

  SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应。SNMP4J是纯面向对象设计与SNMP++...

1785
来自专栏信安之路

HCTF2017的三个WriteUp

解决方法就是先 undefine 掉函数,再右键选择 Code,最后 Create function 就可以正常反编译了。

1070
来自专栏Linux驱动

第1阶段——uboot分析之启动函数bootm命令 (9)

本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0...

1825
来自专栏小灰灰

RabbitMQ基础教程之基本使用篇

1762
来自专栏移动开发的那些事儿

BlockCanary源码解析

如上代码中的loop()方法是Looper中的,我们的目的是监测主线程的卡顿问题,因为UI更新界面都是在主线程中进行的,所以在主线程中做耗时操作可能会造成界面卡...

1212

扫码关注云+社区