Skip to content

通过函数和@Published属性进行交互

在 SwiftUI 中,ViewModel 通过函数和 @Published 属性与 View 进行交互,这是一种非常棒的方式来保持代码的清晰和可维护性!🎉 让我们深入了解一下。

@Published 属性:状态的广播员

@Published 是一个属性包装器,它来自 Combine 框架。当你使用 @Published 标记 ViewModel 中的属性时,每当该属性的值发生变化,它都会自动通知所有监听者。这就像一个广播员,告诉大家:“嘿,我更新了!” 📢

例如:

swift
class MyViewModel: ObservableObject {
    @Published var counter: Int = 0
}

在这个例子中,counter 是一个 @Published 属性。任何观察 MyViewModelView 都会在 counter 改变时自动更新。

函数:行为的触发器

函数是 ViewModel 中定义行为的主要方式。View 可以调用 ViewModel 中的函数来触发状态的改变。这使得 View 可以专注于展示数据,而将业务逻辑委托给 ViewModel

例如:

swift
class MyViewModel: ObservableObject {
    @Published var counter: Int = 0

    func incrementCounter() {
        counter += 1
    }
}

在这个例子中,incrementCounter() 函数会增加 counter 的值。View 可以调用这个函数来增加计数器。

在 View 中使用函数和 @Published

View 中,你可以使用 @ObservedObject@StateObject 来观察 ViewModel。然后,你可以通过绑定到 @Published 属性来显示数据,并通过调用函数来触发行为。

swift
struct MyView: View {
    @ObservedObject var viewModel = MyViewModel()

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

在这个例子中,Text 视图绑定到 viewModel.counter,所以每当 counter 的值改变,Text 视图都会自动更新。Button 调用 viewModel.incrementCounter() 函数,从而改变 counter 的值。

优势

  • 清晰的分离: 状态和行为被封装在 ViewModel 中,View 只负责展示。
  • 可测试性: ViewModel 可以独立于 View 进行测试。
  • 可维护性: 代码更易于理解和修改。

通过函数和 @Published 属性进行交互,你可以构建出更加健壮和可维护的 SwiftUI 应用!💪 记住,良好的架构是成功的关键!

本站使用 VitePress 制作