Skip to content

创建 ViewModel 作为 ObservableObject

在 SwiftUI 中,使用 MVVM (Model-View-ViewModel) 架构可以显著提升代码的可维护性和可测试性。而 ViewModel 在 MVVM 中扮演着至关重要的角色。它负责处理视图的业务逻辑和状态,并将数据传递给视图进行展示。创建一个 ViewModel 并使其遵循 ObservableObject 协议,是实现 MVVM 的关键一步。🎉

ObservableObject 是 SwiftUI 提供的一个协议,它允许 ViewModel 将其状态变化通知给视图。当 ViewModel 的属性发生改变时,视图会自动更新,从而保持数据的一致性。这极大地简化了数据绑定和状态管理。

如何创建 ObservableObject ViewModel?

  1. 定义 ViewModel 类: 首先,你需要创建一个类来表示你的 ViewModel。这个类将包含视图所需的所有状态和业务逻辑。

    swift
    class MyViewModel: ObservableObject {
        // ViewModel 的属性和方法
    }
  2. 遵循 ObservableObject 协议: 让你的 ViewModel 类遵循 ObservableObject 协议。这会自动为你的 ViewModel 添加必要的机制,以便它可以发布状态变化。

    swift
    class MyViewModel: ObservableObject {
        // ViewModel 的属性和方法
    }
  3. 使用 @Published 属性包装器: 使用 @Published 属性包装器来标记那些需要被视图观察的属性。当这些属性的值发生改变时,ViewModel 会自动通知所有订阅者(通常是视图)。

    swift
    class MyViewModel: ObservableObject {
        @Published var message: String = "Hello, SwiftUI!"
    }

ViewModel 的优势

  • 代码分离: 将视图逻辑与业务逻辑分离,提高代码的可读性和可维护性。
  • 可测试性: ViewModel 可以独立于视图进行测试,提高代码的质量。
  • 可重用性: ViewModel 可以在多个视图中重用,减少代码的重复。
  • 响应式更新: 视图可以自动响应 ViewModel 的状态变化,保持数据的一致性。

示例代码

swift
import SwiftUI

class ContentViewModel: ObservableObject {
    @Published var counter: Int = 0

    func incrementCounter() {
        counter += 1
    }
}

struct ContentView: View {
    @StateObject var viewModel = ContentViewModel()

    var body: some View {
        VStack {
            Text("Counter: \(viewModel.counter)")
            Button("Increment") {
                viewModel.incrementCounter()
            }
        }
    }
}

在这个例子中,ContentViewModel 是一个 ObservableObject,它包含一个 @Published 属性 counter。当点击按钮时,incrementCounter() 方法会增加 counter 的值,并且视图会自动更新。是不是很简单呢?🚀

通过创建 ViewModel 作为 ObservableObject,你可以更好地组织你的 SwiftUI 代码,并构建更可维护和可测试的应用程序。记住,良好的架构是构建成功应用的关键!💪

本站使用 VitePress 制作