ios - 在 RxSwift 中从 ViewModel 获取字符串到 View

标签 ios swift mvvm rx-swift

我尝试使用 PublishSubject()ViewModelView 获取字符串,但 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: 使用驱动器更新了 View 中的代码:

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

关于ios - 在 RxSwift 中从 ViewModel 获取字符串到 View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48730658/

相关文章:

ios - 使用制图的 UIScrollView contentSize 高度

ios - Alamofire 对此报错

objective-c - 无法在 Objective C 中调用 swift 函数。获取 NSObject 的错误接口(interface) declaration

silverlight-3.0 - 在 Silverlight MVVM RIA 服务应用程序中放置业务规则的最佳位置在哪里?

ios - 如何为 ARKit 将 dae 导入 SceneKit

ios - xib/uibuttons 添加为 ViewController subview ?

arrays - 从数组创建字典但键唯一性有问题

WPF/MVVM 设计建议

c# - 具有复杂模型的 MVVM

ios - Xcode 13 - 缺少 IOS 15 模拟器?