【发布时间】:2018-02-11 10:44:38
【问题描述】:
我正在尝试使用PublishSubject() 获取从ViewModel 到View 的字符串,但View 无法获取。以下是我在ViewModel 中的代码:
var myImageURL: PublishSubject<String> = PublishSubject<String>()
self.myService.getImage(materialNo: materialNumber).subscribe(
onNext: { [weak self] imageURL in //I am able to get url here and want to send it to View, following doesn't work
self?.myImageURL.onNext(imageURL)
self?.myImageURL.onCompleted()
},
onError: { error in },
onCompleted: { }
)
.disposed(by: disposeBag)
View中的代码:
let disposeBag = DisposeBag()
self.viewModel.myImageURL.subscribe(
onNext: {
print($0 + " image url")
self.myImageView.af_setImage(withURL: URL(string: $0)!, placeholderImage:UIImage(named: "tool_placeholder"))
},
onError: {
print(String(describing: $0).capitalized)
}
)
.disposed(by: disposeBag)
虽然 viewModel 代码工作正常,但我无法在 View 中接收到它的值。
编辑1: 更新了驱动视图中的代码:
self.viewModel.myImageURL
.asObservable()
.asDriver(onErrorJustReturn: "Error")
.drive(onNext: {
self. myImageView.af_setImage(withURL: URL(string: $0)!, placeholderImage:UIImage(named: "tool_placeholder"))
}
)
.disposed(by: disposeBag)
【问题讨论】:
-
viewModel.myImageURL可能会在视图订阅它之前发出一个值。没有更多的上下文很难说。您可以尝试在视图模型的onNext块中放置一个断点,在视图中对subscribe的调用中放置另一个断点,并检查它们是否按预期顺序发生。 HTH。