阅读 641

Alamofire学习笔记 - HTTPHeader

一.注释的写法:

1 init

1.1 标明初始化所产生的对象的特征

1.2 Creates a/an XXXX from XXXX. what different form instance by init

    /// Creates an empty instance.
    public init() {}
    
    /// Create an instance from an array of `HTTPHeader`s. Duplicate case-insensitive names are collapsed into the last.
    /// name and value encountered.
    public init(_ headers: [HTTPHeader]) {
        self.init()
        
        headers.forEach { update($0) }
    }
    
    /// Create an instance form a `[String: String]`. Duplicate case-insensitive names are collapsed into the last name.
    /// and value encounterd.
    public init(_ dictionary: [String: String]) {
        self.init()
        
        dictionary.forEach{ update(HTTPHeader(name: $0.key, value: $0.value))}
    }
复制代码

2 普通方法

2.1 标明该方法的作用

2.2 标明该方法对instance or class 所产生的的影响

2.3 标注该方法会产生的副作用注意点

2.4 如果有参数,需要在说明和参数说明之间回车一行

2.5 标明返回值的意义

2.6 如果返回值是可选类型(optional)则需要注明:if it exists.

2.7 返回值回车一行

3 计算属性

3.1 标明该计算属性的意义

3.2 标明该计算属性所依赖的变量,即如何计算的

4 其他

4.1 所有的形参和实参需要``包裹

4.2 结尾加.

4.3 注意三单形式

4.4 对于假设:It is assumed, per Swift naming conventions, that the first character of the key is lowercase.

二 协议

1 ExpressibleByDictionaryLiteral

实现该协议可以字典一样简易初始化[:]

extension HTTPHeaders: ExpressibleByDictionaryLiteral {
    public init(dictionaryLiteral elements: (String, String)...) {
        self.init()
        
        elements.forEach{ update(name: $0.0, value: $0.1) }
    }
}
复制代码

2 ExpressibleByArrayLiteral

实现该协议可以像数组一样初始化[]

extension HTTPHeaders: ExpressibleByArrayLiteral {
    public init(arrayLiteral elements: HTTPHeader...) {
        self.init(elements)
    }
}
复制代码

3 Sequence & Collection

实现这两个协议可以视为数组,同数组一样使用

extension HTTPHeaders: Sequence {
  public func makeIterator() -> IndexingIterator<[HTTPHeader]> {
      headers.makeIterator()
  }
}

extension HTTPHeaders: Collection {
  public var startIndex: Int {
      headers.startIndex
  }

  public var endIndex: Int {
      headers.endIndex
  }

  public subscript(position: Int) -> HTTPHeader {
      headers[position]
  }

  public func index(after i: Int) -> Int {
      headers.index(after: i)
  }
}
复制代码
headers.map
headers.isEmpty
for header in sessionHeaders
复制代码

4 CustomStringConvertible

实现该协议可以控制打印输出,同OC的description方法

三 特殊函数

subscript

public subscript(_ name: String) -> String?
复制代码

实现该函数可以使用下标

 public subscript(_ name: String) -> String? {
        get { value(for: name) }
        set {
            if let value = newValue {
                update(name: name, value: value)
            } else {
                remove(name: name)
            }
        }
    }
复制代码
headers[header.name] = header.value
复制代码

四 只读属性的写法

1 计算属性

public var dictionary: [String: String] {
        let namesAndValues = headers.map { ($0.name, $0.value) }
        
        return Dictionary(namesAndValues, uniquingKeysWith:{ _, last in last })
}
复制代码

2 存储属性

private(set) var name: String
复制代码

五 简单工厂的写法

public static var sortedKeys: JSONParameterEncoder {
        let encoder = JSONEncoder()
        encoder.outputFormatting = .sortedKeys

        return JSONParameterEncoder(encoder: encoder)
    }
复制代码
文章分类
iOS
文章标签