美文网首页Swiftselector
Swift Day 23 源码阅读技巧

Swift Day 23 源码阅读技巧

作者: 望穿秋水小作坊 | 来源:发表于2020-12-29 21:46 被阅读0次
    1.Swift 源码目录简介(对以后看源码很有帮助)
    image.png
    2. Array 中 map 的实现
    • swift 中可以将 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)
    
    • 因此,我们有时候用 flatMap 来解包计算会使得代码很简洁
    4. Optional 中 ?? 空合并运算符 的实现
    5. Optional 中 == 的实现

    相关文章

      网友评论

        本文标题:Swift Day 23 源码阅读技巧

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