RxSwift (5)高阶函数

2019-07-31  本文已影响0人  忆痕无殇
定义

*在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:
*接受一个或多个函数作为输入
*输出一个函数

RxSwift高阶函数的理解

1:map函数:可以对数组中的每一个元素做一次处理

    public func map<R>(_ transform: @escaping (E) throws -> R)
        -> Observable<R> {
        return self.asObservable().composeMap(transform)
    }

map函数通过observable对象查找composeMap函数

 /// Optimizations for map operator
    internal func composeMap<R>(_ transform: @escaping (Element) throws -> R) -> Observable<R> {
        return _map(source: self, transform: transform)
    }

继续来到_map函数

internal func _map<Element, R>(source: Observable<Element>, transform: @escaping (Element) throws -> R) -> Observable<R> {
    return Map(source: source, transform: transform)
}

找到Map类的定义

final private class Map<SourceType, ResultType>: Producer<ResultType>

通过Producer核心逻辑通过subscribe函数和run函数对每个数组中的元素进行处理。
2:map和flatMap的不同之处
(1)flatMap返回后的数组中不存在nil,同时它会把Optional解包
(2)flatMap还能把数组中存有数组的数组(二维数组、N维数组)一同打开变成一个新的数组
(3)flatMap也能把两个不同的数组合并成一个数组,这个合并的数组元素个数是前面两个数组元素个数的乘积

 public func flatMap<O: ObservableConvertibleType>(_ selector: @escaping (E) throws -> O)
        -> Observable<O.E> {
            return FlatMap(source: self.asObservable(), selector: selector)
    }

继续来到FlatMap函数

final private class FlatMap<SourceElement, SourceSequence: ObservableConvertibleType>: Producer<SourceSequence.E> 

还是找到Producer核心逻辑。

上一篇 下一篇

猜你喜欢

热点阅读