Alamofire学习笔记 - HTTPMethod

327 阅读1分钟

一 协议

1 RawRepresentable

实现该协议可以

1.1 如果实现协议的不是enmu,则让该类拥有enmu的能力

1.2 如果实现协议的是enmu,则让enmu可以自定义原值(rawValue)的类型

二 为什么用Struct模仿enum,而不直接用enmu:String

源码如下:

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

    public let rawValue: String

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

1 遵循“开闭原则”

开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭

如果是enmu,当需要拓展新的method类型的时候需要更改源码。但是如果是struct则可以通过extension拓展

public enum HTTPMethodEnum: String {
    case connect, delete, get, head, options, patch ,post, put, trace
}

/// xcode报错,无法通过extension拓展enmu
extension HTTPMethodEnum {
    case custom
}
extension HTTPMethod {
    static let custom = HTTPMethod(rawValue: "CUSTOM")
}

2 面向对象的思想

就如同Alamofire的序列化思想一样,将每个都当做一个对象去对待。