从带有RxSwift的不同ViewController将模型传递给ViewModel

问题描述

我对Swift和Reactive编程还是很陌生,我还停留在VC和VM之间传递数据

因此,我有2个带有自己的VM的VC,他们两个都可以访问将在VM中处理的1个数据模型。我已经对该解决方案进行了一些研究,即在当前页面视图模型中定义目标视图控制器的视图模型。但是问题是,视图模型绑定了一些rx视图组件,因此,在初始化它时,它将需要目标视图控制器的rx视图组件

这是我的主页面/当前页面VC


import UIKit

class MainPageViewController: UIViewController {
    
    
    var mainPageviewmodel : MainPageviewmodel!
    private let disposeBag = disposeBag()
    
 
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.mainPageviewmodel = MainPageviewmodel(nil)
    }
    
    override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
        
        let destVC : FilterPageViewController = segue.destination as! FilterPageViewController
        destVC.filterPageviewmodel = FilterPageviewmodel(minimumPriceQuery: destVC.minimumPriceTF.rx.text.orEmpty.asDriver(),maximumPriceQuery: destVC.maximumPriceTF.rx.text.orEmpty.asDriver(),wholesaleQuery: destVC.switchToggle.rx.isOn.asDriver(),requestModel: self.mainPageviewmodel.requestparam())

    }
}
  

我的主页面/当前页面虚拟机

protocol RequestParameterProtocol{
    func requestparam() -> RequestModel
}

class MainPageviewmodel {
    private let disposeBag = disposeBag()
    private var requestModel : RequestModel!
    
    init(_ model : RequestModel?){
        if let params = model {
            self.requestModel = params
        }else{
            self.requestModel = RequestModel()
        }
    }
    
}

extension MainPageviewmodel : RequestParameterProtocol{
    func requestparam() -> RequestModel {
        return self.requestModel
    }
    
    
}

这是目标视图控制器



class FilterPageViewController: UIViewController {
    
    var filterPageviewmodel : FilterPageviewmodel!
    private let disposeBag = disposeBag()
    
    @IBOutlet weak var switchToggle: UISwitch!
    @IBOutlet weak var minimumPriceTF: UITextField!
    @IBOutlet weak var maximumPriceTF: UITextField!
    override func viewDidLoad() {
        
        super.viewDidLoad()
        // self.filterPageviewmodel = FilterPageviewmodel(minimumPriceQuery: self.minimumPriceTF.rx.text.orEmpty.asDriver(),maximumPriceQuery: self.maximumPriceTF.rx.text.orEmpty.asDriver(),wholesaleQuery: self.switchToggle.rx.isOn.asDriver())
   }
    
}

这是它的视图模型

class FilterPageviewmodel {
    
    private let disposeBag = disposeBag()
    private var requestModel : RequestModel
    
    
    init(minimumPriceQuery: Driver<String>?,maximumPriceQuery : Driver<String>?,wholesaleQuery : Driver<Bool>?,requestModel : RequestModel
    ) {
        self.requestModel = requestModel
    }
}

所以这里的问题是我无法从当前的视图控制器定义目标视图模型,因为它需要定义一些rx视图组件的东西

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)