gpt4 book ai didi

swift - 为什么 range() 和 sequenceOf() 在 RxSwift 中与 flatMap 的行为不同

转载 作者:搜寻专家 更新时间:2023-10-31 22:48:42 26 4
gpt4 key购买 nike

我是 Swift 和 ReactiveX 的新手。觉得flatMap理解起来有难度。在学习 flatMap 的测试中,我分别使用 range() 和 sequenceOf() 来创建可观察对象。但是为什么输出出乎意料地不同,如下所示:

import RxSwift



let sequenceInt = sequenceOf(1,2,3)

let rangeInt = range(1,3)



print( " ---- expects: [[1],[1,2],[1,2,3]] " )

print (" ---- hence: [1,1,2,1,2,3]")



print(" ---- sequenceOf misbehaving ----")

sequenceInt.flatMap { i in range( 1, i) }.subscribe { print($0) }

print(" ---- range behaves as expected ----")



rangeInt.flatMap { i in range( 1, i) }.subscribe { print($0) }

输出:

 ---- expects:  [[1],[1,2],[1,2,3]] 

---- hence: [1,1,2,1,2,3]

---- sequenceOf misbehaving ----

Next(1)

Next(1)

Next(1)

Next(2)

Next(2)

Next(3)

Completed

---- range behaves as expected ----

Next(1)

Next(1)

Next(2)

Next(1)

Next(2)

Next(3)

Completed

最佳答案

通过深入研究 RxSwift 的源代码,我想我找到了原因。 sequenceOf() 一次发出所有元素,而 range() 使用调度程序。

...
public func sequenceOf<E>(elements: E ...) -> Observable<E> {
return AnonymousObservable { observer in
for element in elements {
observer.on(.Next(element))
}

observer.on(.Completed)
return NopDisposable.instance
}
}

关于swift - 为什么 range() 和 sequenceOf() 在 RxSwift 中与 flatMap 的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32930941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com