返回

iExpense 的观察者模式:解锁 SwiftUI 的响应式编程

IOS

导言:iExpense 中的观察者模式

在 SwiftUI 中,ObservableObject 协议扮演着至关重要的角色,它使数据与 UI 视图之间实现响应式绑定。这在像 iExpense 这样的应用程序中非常有用,iExpense 允许用户跟踪他们的开支。通过利用 ObservableObject,iExpense 可以确保当应用程序数据发生更改时,所有相关视图都能自动更新,从而提供无缝的用户体验。

ObservableObject 原理

ObservableObject 是一个协议,它要求遵循它的类实现两个关键属性:

  • published 变量: 这些变量包含应用程序状态的数据,并且当它们被更改时,会自动通知 SwiftUI。
  • objectWillChange 发布者: 当 published 变量被更改时,此发布者会发出信号。

在 iExpense 中使用 ObservableObject

在 iExpense 应用程序中,我们创建一个名为 Expense 的类来表示每个开支项。Expense 类遵循 ObservableObject 协议,并定义了以下 published 变量:

  • name: 开支项的名称
  • type: 开支项的类型(例如,个人、商业)
  • amount: 开支金额

创建新开支项视图

为了允许用户添加新开支项,我们创建一个名为 AddExpenseView 的视图。这个视图使用 @ObservedObject 属性包装器来监听 Expense 对象中 published 变量的变化:

struct AddExpenseView: View {
  @ObservedObject var expense: Expense
  ...
}

当用户更新 expense 对象的 published 变量(例如,键入开支项名称)时,objectWillChange 发布者会发出信号,通知 SwiftUI 这些更改。然后,SwiftUI 将自动更新所有使用 AddExpenseView 视图的界面。

添加开支项到集合

一旦用户完成添加新开支项,我们需要将其添加到 Expense 对象的集合中。这可以通过使用 @State 变量来跟踪 Expense 对象的数组,并在 AddExpenseView 中提供一个按钮来触发添加操作:

struct ContentView: View {
  @State private var expenses: [Expense] = []
  ...
}
struct AddExpenseView: View {
  ...
  func addExpense() {
    expenses.append(expense) // 将 expense 对象添加到 expenses 数组
  }
  ...
}

结论

通过利用 SwiftUI 中的 ObservableObject 协议,iExpense 应用程序可以实现响应式编程,使多个视图能够与共享数据保持同步。这大大简化了用户界面开发,确保了当应用程序数据发生更改时,所有相关视图都能自动更新。通过使用 ObservableObject,SwiftUI 开发人员可以创建高度动态且响应迅速的应用程序。