【问题标题】:Binding of model and viewModel in Swift BondSwift Bond 中模型和视图模型的绑定
【发布时间】:2017-05-20 06:23:34
【问题描述】:

我正在使用 Swift Bond 将视图与 viewModel 进行双向绑定。这是通过双向绑定实现的。

问题是: 将模型与 viewModel 绑定的常见做法是什么,更具体地说,模型如何知道 viewModel 中所做的更改。在 ReactiveCocoa 中有 RACChannel 可以做到这一点,因此您可以在不更改模型属性类型的情况下绑定 viewModel 和模型。

主要目标是保持模型非常简单,仅使用 String、Int、Date 等原始类型,并将 Observable 和 Property 类型移动到 viewModel。

插图:

import Bond
import ReactiveKit

struct Person {
    var name: String
    var age: Int
    var birthdate: Date
}

struct PersonViewModel {
    fileprivate var person: Person

    var name: Observable<String>
    var age: Observable<Int>
    var birthDate: Observable<Date>

    init(person: Person) {
        self.person = person

        // what should go here in order to bind properties???
    }
}

【问题讨论】:

    标签: swift mvvm reactive-programming reactive-cocoa reactivekit


    【解决方案1】:

    为了将ViewModelModel 双向绑定在一起,您需要在Person Model 中具有可绑定属性,这听起来像是您想要避免的。无法绑定到纯 Int、String 或 Date 类型。

    您可以修改您的Model 以使用可绑定属性,或者您可以构建一个解决方案,让您的Model 通过某种类型的可观察抽象与您的ViewModel 交互。

    biDirectionalBind 通常用于将ViewModel 层中的属性与视图层绑定,以便将来自用户交互的更新传递回ViewModel,例如:

    let name = Property<String>("Fred")
    let textField = UITextField()
    name.bidirectionalBind(to: textField.bnd_text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-06
      • 2012-07-31
      • 1970-01-01
      • 2011-03-29
      • 2013-01-03
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      相关资源
      最近更新 更多