![](/img/trans.png)
[英]How to bind data from viewModel in view with rxSwift and Moya?
[英]Getting string from ViewModel to View in RxSwift
我正在嘗試使用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
接收其值。
Edit1:在驅動器視圖中更新了代碼:
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)
看起來您訂閱的值不正確? 您定義了:
var toolImageURL: PublishSubject<String> = PublishSubject<String>()
在您的viewModel中,但是在viewModel.myImageURL
上稱為subscribe
。
您使用的發布主題應使用“驅動程序”“綁定”到ImageView,以確保其代碼在主線程上運行(否則可能會崩潰)。
self.viewModel.myImageURL
.asObservable()
.asDriver(onErrorJustReturn: "Error")
.drive(self.myImageView.af_setImage(withURL: URL(string: $0)!,
placeholderImage:UIImage(named: "tool_placeholder")))
.addDisposableTo(self.disposeBag)
首先嘗試一下。 其次,您在VM中的代碼對我而言並不那么直接,為什么要在onNext
塊中調用onCompleted
? 為什么不只使用onCompleted
塊在底部留空廣告呢?
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.