Observable “可观测”仅发射一个值?
我是RxSwift的新手,我在控制台中截取了打印的代码: 下一个(第二个值) 完成 但我期待着这个结果: 下一个(第一个值) 下一个(第二个值) 完成 为什么反应不是两倍于订阅?我知道,在react中,当我们观察到的变量发生变化时,可观察对象会发出并触发subscribe evert,但代码没有显示这一点。我是否误解了这个概念Observable “可观测”仅发射一个值?,observable,rx-swift,Observable,Rx Swift,我是RxSwift的新手,我在控制台中截取了打印的代码: 下一个(第二个值) 完成 但我期待着这个结果: 下一个(第一个值) 下一个(第二个值) 完成 为什么反应不是两倍于订阅?我知道,在react中,当我们观察到的变量发生变化时,可观察对象会发出并触发subscribe evert,但代码没有显示这一点。我是否误解了这个概念 var mutableString = "first value" mutableString = "second value"
var mutableString = "first value"
mutableString = "second value"
var stringObservable: Observable<String> = Observable.of(mutableString)
stringObservable.subscribe { event in
print(event)
}
var mutableString=“第一个值”
mutableString=“第二个值”
var stringObservable:Observable=可观测的(可变字符串)
stringObservable.subscribe{中的事件
打印(事件)
}
当程序运行时,它会一步一步地遍历每一行代码。因此,它首先创建变量mutableString
,并为其分配“第一个值”。然后在下一行中,它为变量指定“第二个值”
然后,它创建类型为Observable
的变量stringObservable
,并将Observable.of(mutableString)
分配给它,因为mutableString包含“第二个值”,即分配给可观察对象内部的值
请注意,可观察对象内部有自己的变量,因此更改mutableString
的值不会影响可观察对象
要获得所需的输出,需要在创建时传递希望可观察对象输出的所有值,如下所示:
let stringObservable: Observable<String> = Observable.of("first value", "second value")
stringObservable.subscribe { event in
print(event)
}
let stringObservable:Observable=Observable.of(“第一个值”、“第二个值”)
stringObservable.subscribe{中的事件
打印(事件)
}
另一种选择是创建一个可观察对象,该对象具有输出值的函数:
func makeObservable(from array: [String]) -> Observable<String> {
Observable<String>.create { observer in
for each in array {
observer.onNext(each)
}
observer.onCompleted()
return Disposables.create()
}
}
func makeObservable(来自数组:[String])->Observable{
创建{observate in
对于数组中的每个{
observer.onNext(每个)
}
observer.onCompleted()
返回一次性物品。创建()
}
}
这就是(:)操作符的可观察的
的基本实现方式。每次订阅生成的Observable时,它都会运行传递到create
函数中的闭包,使其再次发出两个值(以及完成的事件)。感谢您的响应,现在我看到了问题,我正在修改变量,而不是Observable本身。如果你想得更多,有一种方法可以将元素添加到一个可观察对象中,但不是在create或of中,我的意思是在of或create中使用一些值对观察对象进行初始化,然后在代码中添加更多值,比如stringObservable.value=“third element”或stringObservable.onNext(“third element”),我看到一些人后来使用了一个变量,他们使用asObservable()强制转换,并可以执行类似StringObservable的操作。value=“third element”可能不允许用于observable?您可以使用主题来执行此操作,然后调用主题上的asObservable()
,以从中获取可观察内容(Variable
是主题的一种形式,没有被弃用。)主题提供了一种方便的方式来浏览Rx,但不建议日常使用。最好是建立一个不变量,使可观察到的东西发出值,而不是无特殊原因发出的东西。