Swift网络请求库Alamofire入门教程

Alamofire是一个使用Swift开发的网络请求库,其开发团队是AFNetworking的原团队。它语法简单,采用链式编程的思想,使用起来相当舒服。它建立在由 Foundation 框架提供的 URL 加载系统之上,Alamofire 的网络特性受到该系统功能的限制,应该始终记住并遵守其行为和最佳实践。

此外,Alamofire(以及 URL 加载系统)中的联网是异步完成的。异步编程可能会让不熟悉这个概念的程序员感到沮丧,但是有很好的理由这样做。

另外:AF命名空间和引用

以前的 Alamofire 文档使用了类似 Alamofire.request() 的示例。这个 API 虽然看起来需要 Alamofire 前缀,但实际上在没有它的情况下也可以。request 方法和其他函数在任何带有 import Alamofire 的文件中都是全局可用的。从 Alamofire 5 开始,此功能已被删除,被更改为 AF ,它是对 Session.default 的引用。这允许 Alamofire 提供同样的便利功能,同时不必每次使用 Alamofire 时都污染全局命名空间,也不必全局复制 Session API。类似地,由 Alamofire 扩展的类型将使用 af 属性扩展来将 Alamofire 添加的功能与其他扩展分开

安装方法

使用CocoaPods安装,

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '项目名称' do
    pod 'Alamofire', '~> 5.0'
end

使用方法

发出请求

最简单的是,只需提供一个可以转换为 URL 的 String :

import Alamofire

AF.request("https://httpbin.org/get").response { response in
    debugPrint(response)
}

它的完整定义如下:

open func request<Parameters: Encodable>(
    _ convertible: URLConvertible,
    method: HTTPMethod = .get,
    parameters: Parameters? = nil,
    encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default,
    headers: HTTPHeaders? = nil,
    interceptor: RequestInterceptor? = nil
) -> DataRequest

HTTP Methods

HTTPMethod 类型列出了 RFC 7231 §4.3 中定义的 HTTP 方法:

public struct HTTPMethod: RawRepresentable, Equatable, Hashable {
    public static let connect = HTTPMethod(rawValue: "CONNECT")
    public static let delete = HTTPMethod(rawValue: "DELETE")
    public static let get = HTTPMethod(rawValue: "GET")
    public static let head = HTTPMethod(rawValue: "HEAD")
    public static let options = HTTPMethod(rawValue: "OPTIONS")
    public static let patch = HTTPMethod(rawValue: "PATCH")
    public static let post = HTTPMethod(rawValue: "POST")
    public static let put = HTTPMethod(rawValue: "PUT")
    public static let trace = HTTPMethod(rawValue: "TRACE")

    public let rawValue: String

    public init(rawValue: String) {
        self.rawValue = rawValue
    }
}

这些值可以作为 method 参数传递给 AF.request API:

AF.request("https://httpbin.org/get")
AF.request("https://httpbin.org/post", method: .post)
AF.request("https://httpbin.org/put", method: .put)
AF.request("https://httpbin.org/delete", method: .delete)
重要的是要记住,不同的 HTTP 方法可能有不同的语义,需要不同的参数编码,这取决于服务器的期望。例如,URLSession 或 Alamofire 不支持在 GET 请求中传递 body 数据,并将返回错误。

如果需要使用 Alamofire 的 HTTPMethod 类型不支持的 HTTP 方法,可以扩展该类型以添加自定义值:

extension HTTPMethod {
    static let custom = HTTPMethod(rawValue: "CUSTOM")
}

请求参数

Alamofire 支持将任何 Encodable 类型作为请求的参数,例如JSON或实现 Encodable 的结构体

struct Login: Encodable {
    let email: String
    let password: String
}

let login = Login(email: "test@test.test", password: "testPassword")

AF.request("https://httpbin.org/post",
           method: .post,
           parameters: login,
           encoder: JSONParameterEncoder.default).response { response in
    debugPrint(response)
}

或者

点击查看代码
let login = ["mail: "test@test.test", password: "testPassword"]

AF.request("https://httpbin.org/post",
           method: .post,
           parameters: login,
           encoder: JSONParameterEncoder.default).response { response in
    debugPrint(response)
}

或者

点击查看代码
let login = ["mail: "test@test.test", password: "testPassword"]

AF.request("https://httpbin.org/post",
           method: .post,
           parameters: login,
           encoder: JSONParameterEncoder.default).response { response in
    debugPrint(response)
}

请求数据

// 下载数据到文件中
AF.download("https://httpbin.org/image/png").responseData { (response) in
    print("****************************")
    debugPrint(response.value!)
    if let data = response.value{
        let image = UIImage(data: data)
        let imageView = UIImageView(image: image)
        self.view.addSubview(imageView)
    }
}

设置Header

let headers: HTTPHeaders = [
  "X-Mashape-Key": MY_API_KEY,
  "Accept": "application/json"
]

Alamofire.request("https://mashape-community-urban-dictionary.p.mashape.com/define?term=smh", headers: headers)
  .responseJSON { response in
  debugPrint(response)
}

 

参考链接:

1. Alamofire 5 的使用 - 基本用法

2. Custom Headers With Alamofire 4 and Swift 3

原编辑时间 2020-12-01 11:39 

posted @ 2021-11-24 13:55  Rogn  阅读(3511)  评论(0编辑  收藏  举报