SwiftUI 和 CombineLatest 具有超过 4 个值

mrw*_*eet 6 swiftui combine

我开始尝试使用 SwiftUI,但我想要最新的 5 个滑块组合。我有 4 个滑块的所有工作,使用CombineLatest4,然后意识到我需要另一个滑块,但没有CombineLatest5.

任何帮助表示赞赏。

澄清工作 4-slider 版本:

Publishers
    .CombineLatest4($slider1, $slider2, $slider3, $slider4)
    .debounce(for: 0.3, scheduler: DispatchQueue.main)
    .subscribe(subscriber)
Run Code Online (Sandbox Code Playgroud)

好的,弄清楚语法,@Daniel-t 是对的。我只需要创建子发布商:

let paramsOne = Publishers
    .CombineLatest3($slider1, $slider2, $slider3)

let paramsTwo = Publishers
    .CombineLatest($slider4, $slider5)

paramsOne.combineLatest(paramsTwo)
    .debounce(for: 0.3, scheduler: DispatchQueue.main)
    .subscribe(subscriber)
Run Code Online (Sandbox Code Playgroud)

请注意,我还必须将订阅者期望的输入内容从 更改(Double, Double, Double, Double, Double)((Double, Double, Double), (Double, Double)),并且编译器给了我一个误导性和令人困惑的错误(关于调度程序),直到我发现输入类型是错误的。

Cri*_*tik 7

注意 - 从问题中提取的解决方案


好吧,弄清楚语法,@Daniel-t 是对的。我只需要创建子发布商:

let paramsOne = Publishers
    .CombineLatest3($slider1, $slider2, $slider3)
        
let paramsTwo = Publishers
    .CombineLatest($slider4, $slider5)
        
paramsOne.combineLatest(paramsTwo)
    .debounce(for: 0.3, scheduler: DispatchQueue.main)
    .subscribe(subscriber)
Run Code Online (Sandbox Code Playgroud)

请注意,我还必须更改我的订户期望的输入 from (Double, Double, Double, Double, Double)((Double, Double, Double), (Double, Double))并且编译器给了我一个误导性和令人困惑的错误(有关调度程序的信息),直到我发现输入类型是错误的。


Dan*_* T. 5

CombineLatest2(CombineLatest3, CombineLatest2) 应该做的伎俩,不是吗?

  • 这些CombineLatestX 看起来多么愚蠢...它不能接受一个数组吗? (5认同)