我使用RxSwift。该函数返回Observable
func getDeviceInfo(_ deviceId: Int) -> Observable<DeviceInfo> {
return Observable.create { o in
self.getInfo(deviceId, onSuccess: { data in
o.onNext(data)
o.onCompleted()
}, onFail: { error in
o.onError(error)
})
return Disposables.create()
}
}
然后我订阅
repository.getDeviceInfo(deviceId)
.subscribe(onNext: { (info) in
print("onNext")
}, onError: { (error) in
print("onError")
}, onCompleted: {
print("onCompleted")
}, onDisposed: {
print("onDisposed")
})
我第一次得到真实的结果。但是,当我第二次,第三次调用subscribe()时,没有调用任何订阅的回调(onNext,onError,onCompleted,onDisposed)。 调试后,我发现getDeviceInfo()中的o.onNext(data)和o.onCompleted()被调用,但是订阅的回调不接收任何数据。 我在RxSwift中的Create.swift文件中调试了下一行
let sink = AnonymousObservableSink(observer: observer, cancel: cancel)
AnonymousObservableSink类一些代码,不是Singelton:
final fileprivate class AnonymousObservableSink<O: ObserverType> : Sink<O>, ObserverType {
override init(observer: O, cancel: Cancelable) {
super.init(observer: observer, cancel: cancel)
}
,但每次引用let sink
都相同。那么,init()函数有时能否返回早期创建的对象?