我用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()第二次,第三次等等时,没有调用subscribe的回调(onNext,onError,onCompleted,onDisposed) . 调试后我发现调用了getDeviceInfo()中的o.onNext(data),o.onCompleted(),但是subscribe的回调没有收到任何数据 . 我在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()func有时会返回早期创建的对象吗?