定义
*在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:
*接受一个或多个函数作为输入
*输出一个函数
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核心逻辑。









网友评论