Swiftselector

Swift Day 23 源码阅读技巧

2020-12-29  本文已影响0人  望穿秋水小作坊
1.Swift 源码目录简介(对以后看源码很有帮助)
image.png
2. Array 中 map 的实现
// 来自 github 中 Swift 开源的 map 实现源码
extension Collection {
  public func map<T>(
    _ transform: (Element) throws -> T
  ) rethrows -> [T] {
    let n = self.count
    if n == 0 {
      return []
    }

    var result = ContiguousArray<T>()
    result.reserveCapacity(n)

    var i = self.startIndex

    for _ in 0..<n {
      result.append(try transform(self[i]))
      formIndex(after: &i)
    }
    return Array(result)
  }
}

var array = [1,2,3].map({ "value is \($0)" })
print(array)
3. Optional 中 map 的实现
// Optional map
  public func map<U>(
    _ transform: (Wrapped) throws -> U
  ) rethrows -> U? {
    switch self {
    case .some(let y):
      return .some(try transform(y))
    case .none:
      return .none
    }
  }

// Optional flatMap
public func flatMap<U>(
    _ transform: (Wrapped) throws -> U?
  ) rethrows -> U? {
    switch self {
    case .some(let y):
      return try transform(y)
    case .none:
      return .none
    }
  }

// 两者区别
var value:Int? = 10
print(value.map({ Optional.some($0+3) }))  // Optional(Optional(13))
print(value.flatMap({ Optional.some($0+3) })) // Optional(13)
4. Optional 中 ?? 空合并运算符 的实现
5. Optional 中 == 的实现
上一篇 下一篇

猜你喜欢

热点阅读