RxSwift 的结构视图模型

Posted

技术标签:

【中文标题】RxSwift 的结构视图模型【英文标题】:structure viewModel for RxSwift 【发布时间】:2020-03-17 03:50:21 【问题描述】:

我正在学习 MVVM 和 RxSwift,我想绑定 UI 中的所有对象。我尝试创建视图模型但编译器弹出错误,我创建的视图模型是否错误?这是我要绑定的代码和 UI。

不能在属性初始化器中使用实例成员“BasicInfoViewModel”;属性初始化器在“self”可用之前运行

    struct BasicInfoViewModel 

    let infos = PublishSubject<InfoResult>()

    let selectedImage: Observable<UIImage>
    let fullname: Observable<String>
    let phoneNumber: Observable<String>
    let email: Observable<String>
    let placeOfBirth: Observable<String>
    let dateOfBirth: Observable<String>
    let religion: Observable<String>

    var isValid: Observable<Bool> 
        return Observable.combineLatest(fullname.asObservable(), phoneNumber.asObservable(), email.asObservable(), placeOfBirth.asObservable(), dateOfBirth.asObservable(), religion.asObservable()).map  $0.0.count > 0 
    


    class BasicInfoViewController: UITableViewController 

        var viewModel = BasicInfoViewModel()
    

【问题讨论】:

这是因为你在 struct 中声明了属性并且没有初始化它们,所以你不能简单地使用 BasicInfoViewModel() 创建 struct 的实例,你必须传递像 BasicInfoViewModel(selectedImage: &lt;#Observable&lt;UIImage&gt;#&gt;, fullname: &lt;#Observable&lt;String&gt;#&gt;, phoneNumber: &lt;#Observable&lt;String&gt;#&gt;.... 这样的初始值 【参考方案1】:

您需要在视图中构建您的 BasicInfoViewModel 并加载方法并从视图中传递输入。

【讨论】:

以上是关于RxSwift 的结构视图模型的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift:如何通过多个视图模型传递控制事件

使用 rxSwift 中的 tableView 单元将数据从视图模型传递到视图控制器

RxSwift MVVM 如何使用项目管理器设置视图模型?

IOS RxSwift中UISearch栏文本和视图模型属性之间的两种方式绑定

RxSwift:嵌套可观察对象上的 FlatMap

未调用 RxSwift 订阅块