gpt4 book ai didi

ios - ReactiveCocoa 将 SignalProducers 合二为一

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:23 25 4
gpt4 key购买 nike

我正在使用 ReactiveCocoa 并且我有几个 SignalProducers

let center = NSNotificationCenter.defaultCenter()
let signalProducer1 = center.rac_notification(name: notificationName1, object: nil)
let signalProducer2 = center.rac_notification(name: notificationName2, object: nil)
let signalProducer3 = center.rac_notification(name: notificationName3, object: nil)

我想将它们组合成一个信号发生器,只要其中一个产生信号,它就会产生一个信号。

一开始 combineLatest 函数看起来是个不错的解决方案

let combinedProducer = combineLatest(signalProducer1, signalProducer2, signalProducer3)

然而,根据this article ,生成的生产者仅在所有三个都产生信号时才产生第一个信号。

This interactive diagram显示了我想要的,所以我想将 flatten 函数与 .Merge FlatteningStrategy 一起使用。但是,我很难找出实现此目的的语法。

最佳答案

更新:RAC 4.2.1 及更高版本

由于changes in how flatten works我们需要帮助编译器更明确地了解类型:

let s1: SignalProducer<Int, NSError> = ...
let s2: SignalProducer<Int, NSError> = ...
let s3: SignalProducer<Int, NSError> = ...


let _: SignalProducer<Int, NSError> =
SignalProducer<SignalProducer<Int, NSError>, NSError>(values: [s1, s2, s3])
.flatten(.Merge)

这变得有点麻烦,所以你可能想拆分它:

let producers: SignalProducer<SignalProducer<Int, NSError>, NSError> =
SignalProducer(values: [s1, s2, s3])

let merged: SignalProducer<Int, NSError> = x.flatten(.Merge)

感谢@Harry 指出新版本问题的评论。


RAC 4.2 及以下版本

在 RAC 4 中这将是

let merged = SignalProducer(values: [signalProducer1, signalProducer2, signalProducer3])
.flatten(.Merge)

目前 Xcode 7.1.1 不建议在自动完成窗口中使用 .flatten,这可能会导致您(或只有我)认为它不存在, 但如果你全部输入它就会起作用。

关于ios - ReactiveCocoa 将 SignalProducers 合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32210564/

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