swift - Swift Bond 中 model 和 viewModel 的绑定(bind)

标签 swift mvvm reactive-programming reactive-cocoa reactivekit

我正在使用 Swift Bond 进行 View 与 viewModel 的双向绑定(bind)。这是通过双向Bind 实现的。

问题是: 将模型与 viewModel 绑定(bind)的常见做法是什么,更具体地说,模型如何了解 viewModel 中所做的更改。在ReactiveCocoa中,有RACChannel可以做到这一点,因此您可以绑定(bind)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???
    }
}

最佳答案

为了将您的 ViewModelModel 双向绑定(bind)在一起,您需要在您的 Person Model 听起来你想避免。无法绑定(bind)到纯 Int、String 或 Date 类型。

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

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

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

关于swift - Swift Bond 中 model 和 viewModel 的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41489609/

相关文章:

ios - 使用 SwiftyJSON 的 NSDictionary 到 json 字符串到 json 对象

ios - 在 TableView 中按下时更新 UISwitch 的状态

angular - catchError 之后的 switchMap 不发出值

java - react 流与非阻塞 I/O 有何不同?

ios - 如何使用 uiwebview 和 swift 登录网站?

c# - WPF MVVM 创建多个数据网格并将项目绑定(bind)到它们

c# - 从 View 模型调用方法的命令

c# - 如何在没有代码隐藏文件的情况下移动无边界 wpf 窗口

java - 如何在调用代码输入和基于计时器的输入之间切换并使用响应式(Reactive)编程对其进行单元测试

ios - UITabBarController 上的 WYPopoverController 下降