【问题标题】:How to combine three Signals using reactive cocoa in swift?如何在swift中使用反应可可组合三个信号?
【发布时间】:2018-04-13 10:48:09
【问题描述】:

我已阅读文档,看起来“and”不适合组合信号。然后,我研究了“combineLatest”,但它希望每个信号至少返回一个值。我的用例是我有三个独立的信号,它们之间没有关系。我只想将它们完全结合起来,在一个地方观察并在封闭内进行相应的处理。

例如:

Signal1<Int, NoError>
Signal2<String, NoError>
Signal3<SomeType, NoError>

Combine3Signals<(Int, String, SomeType), NoError>.observeValues {...//handle accordingly based on type...}

【问题讨论】:

    标签: swift reactive-cocoa reactive-swift


    【解决方案1】:

    您可以为此使用Signal.merge,但首先您必须说服编译器您确实想要合并这些不同的类型

    let p1 = MutableProperty<Int>(1)
    let p2 = MutableProperty<Bool>(false)
    let p3 = MutableProperty<String>("")
    
    let s1: Signal<Any, NoError> = p1.signal.map { $0 }
    let s2: Signal<Any, NoError> = p2.signal.map { $0 }
    let s3: Signal<Any, NoError> = p3.signal.map { $0 }
    
    let merged = Signal<Any, NoError>.merge(s1, s2, s3)
    merged.observeValues { print($0) }
    
    
    p1.value = 2
    p1.value = 3
    p3.value = "Hello"
    p2.value = true
    

    没有map,编译器会报错

    error: cannot convert value of type 'Signal<Int, NoError>' to specified type 'Signal<Any, NoError>'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多