繁体   English   中英

观察类变量以了解RxSwift中viewModel的任何更改

[英]observing a class Variable for any change in viewModel in RxSwift

我有一个定义服务类的ViewModel,此服务类在此ViewModel的初始化程序中初始化。 现在,当ViewModel中的值发生任何更改(从服务中获取)时,我需要更新View。 尽管我找到了一些使用Variable的示例,但是在Class Injection中却找不到。 ViewController:

    var presenter:Variable<CardViewModelProtocol>!
        func setPresenter() {
//Following line has error
            self.presenter = Variable<CardViewModelProtocol>(CardViewModelProtocol(service:CardService()))
            self.presenter.value.attachView(view: self)
        }

演示者初始化的行给出了错误。 错误:

无法构造“ CardPresenterProtocol”,因为它没有可访问的初始化程序

以下是ViewModel的初始化方式:

var cardService:CardServiceContract!
var materialNum = Variable<String>("")

init(service:CardServiceContract){
    self.cardService = service
}

Edit1:简而言之,我想将以下行转换为支持变量的RxSwift并在CardViewModel中观察一个变量(类对象):

self.presenter = CardViewModel(service: CardService())

编辑2:

    protocol CardViewModelProtocol : BaseViewModelProtocol {

    func loadCardInfo(Serial serial:String)

    var materialNum: Variable<String> {get set}
}
protocol BaseViewModelProtocol {
    func attachView(view: BaseViewProtocol)
}
protocol BaseViewProtocol{
    func setViewModel()
}

这是用法的一个示例-https: //github.com/RxSwiftCommunity/RxSegue/blob/master/Example/RxSegue/ProfileViewController.swift

但是请记住,RxSwift 4.0.0“赞成使用BehaviorRelay弃用变量”。

如果您没有义务遵循MVVM,则可以尝试单向数据流方法-https: //github.com/maxvol/RaspSwift

如果要连续订阅服务器更新,可以使用.switchLatest()运算符,例如:

let stream = PublishSubject<Observable<Response>>()
stream.switchLatest().subscribe(consumer)
stream.onNext(serverRequestReturningResponseObservable) // repeat whenever needed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM