2

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

例如:

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

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

1 回答 1

6

您可以使用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>'
于 2018-04-13T18:29:03.723 回答