美文网首页
Alamofire-初探

Alamofire-初探

作者: king_jensen | 来源:发表于2019-08-20 10:59 被阅读0次

Alamofire的使用

  let urlStr = "xxx"
   Alamofire.request(urlStr)
            .responseJSON { (response) in
            print(response)
        }

URLSession的写法有什么不一样?
1.简单。一步到位省略(URLSession创建,DataTask创建等)步骤。
2.采用链式语法
3.直接返回JSON
4.参数直接是字符串类型的urlStr

Alamofire.request实现分析

request的源码:

public func request(
    _ url: URLConvertible,
    method: HTTPMethod = .get,
    parameters: Parameters? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: HTTPHeaders? = nil)
    -> DataRequest
{
    return SessionManager.default.request(
        url,
        method: method,
        parameters: parameters,
        encoding: encoding,
        headers: headers
    )
}

1._urlURLConvertible协议的类型,不是固定的某一个类型。

public protocol URLConvertible {
    /// Returns a URL that conforms to RFC 2396 or throws an `Error`.
    ///
    /// - throws: An `Error` if the type cannot be converted to a `URL`.
    ///
    /// - returns: A URL or throws an `Error`.
    func asURL() throws -> URL
}

extension String: URLConvertible {
    /// Returns a URL if `self` represents a valid URL string that conforms to RFC 2396 or throws an `AFError`.
    ///
    /// - throws: An `AFError.invalidURL` if `self` is not a valid URL string.
    ///
    /// - returns: A URL or throws an `AFError`.
    public func asURL() throws -> URL {
        guard let url = URL(string: self) else { throw AFError.invalidURL(url: self) }
        return url
    }
}

extension URL: URLConvertible {
    /// Returns self.
    public func asURL() throws -> URL { return self }
}

extension URLComponents: URLConvertible {
    /// Returns a URL if `url` is not nil, otherwise throws an `Error`.
    ///
    /// - throws: An `AFError.invalidURL` if `url` is `nil`.
    ///
    /// - returns: A URL or throws an `AFError`.
    public func asURL() throws -> URL {
        guard let url = url else { throw AFError.invalidURL(url: self) }
        return url
    }
}

String,URL,URLComponents都进行扩展,实现asURL()方法。让用户使用起来更方便,传递String,URL,URLComponents类型都是没有问题的。这种设计思维在SDK设计中可以借鉴。

  1. method: HTTPMethod = .get
public enum HTTPMethod: String {
    case options = "OPTIONS"
    case get     = "GET"
    case head    = "HEAD"
    case post    = "POST"
    case put     = "PUT"
    case patch   = "PATCH"
    case delete  = "DELETE"
    case trace   = "TRACE"
    case connect = "CONNECT"
}

枚举的属性值关联,这里的.get就是GET

3.Alamofire.request直接使用,Alamofire是什么?
Alamofire只是一个模块导入,cocopods模块就具备这个功能。

4.AlamofireSessionManager.default的封装,为什么不直接使用?
主要是为了降低门槛,拿到框架最直接要做的事就是发请求,正常思维能想到Alamofire.request 直接使用.

5.Alamofire模块在这个作用域里提供了提供requestdownloadupload等很多方法。
Alamofire.request中内部中转,处理的实际类型是SessionManager.default
Alamofire提供requestdownloadupload.使用装饰者模式。

相关文章

  • 2019-08-22

    Alamofire-初探

  • Alamofire-初探

    Alamofire的使用 和URLSession的写法有什么不一样?1.简单。一步到位省略(URLSession创...

  • Alamofire-初探

    对于iOS开发者来说,AFNetworking是我们大家所熟知的,而Alamofire呢?Alamofire框架其...

  • Alamofire框架使用

    Alamofire-使用[https://blog.csdn.net/yahibo/article/details...

  • Alamofire-多表单上传

    一、AFN上传文件 二、Alamofire-多表单上传 点击.upload multipartFormData(f...

  • Alamofire - Request

    上一篇 Alamofire-后台下载 其中就介绍了关于 SesssionManager 到 SessionDele...

  • Alamofire-细节

    一、动态适配adapter RequestAdapter协议 adapt Alamofire没有实现,需要自己实现...

  • Alamofire-使用

    所有类型请求,Alamofire都直接提供,通过Alamofire直接调用,配置相关参数即可。示例如下: 1、GE...

  • 苹果 ARKit 初探

    苹果 ARKit 初探 苹果 ARKit 初探

  • iOS 8 Size Classes初探

    iOS 8 Size Classes初探 iOS 8 Size Classes初探

网友评论

      本文标题:Alamofire-初探

      本文链接:https://www.haomeiwen.com/subject/vrlusctx.html