Observable “可观测”仅发射一个值?

Observable “可观测”仅发射一个值?,observable,rx-swift,Observable,Rx Swift,我是RxSwift的新手,我在控制台中截取了打印的代码: 下一个(第二个值) 完成 但我期待着这个结果: 下一个(第一个值) 下一个(第二个值) 完成 为什么反应不是两倍于订阅?我知道,在react中,当我们观察到的变量发生变化时,可观察对象会发出并触发subscribe evert,但代码没有显示这一点。我是否误解了这个概念 var mutableString = "first value" mutableString = "second value"

我是RxSwift的新手,我在控制台中截取了打印的代码:

下一个(第二个值)

完成

但我期待着这个结果:

下一个(第一个值)

下一个(第二个值)

完成

为什么反应不是两倍于订阅?我知道,在react中,当我们观察到的变量发生变化时,可观察对象会发出并触发subscribe evert,但代码没有显示这一点。我是否误解了这个概念

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,但不建议日常使用。最好是建立一个不变量,使可观察到的东西发出值,而不是无特殊原因发出的东西。