You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MVVM的iOS SwiftUI应用是否需要控制器?

SwiftUI中MVVM架构的控制器角色解析

在SwiftUI的MVVM架构中,不存在传统UIKit里的ViewController(控制器),但你看到的文章内容也没错——它大概率是针对UIKit+MVVM的场景写的,两者的差异源于UI框架本身的设计:

1. SwiftUI下的MVVM:无控制器的架构

SwiftUI是声明式UI框架,它本身就没有ViewController这个概念:

  • View负责UI渲染、用户交互的触发(比如按钮点击、列表选择),并通过@ObservedObject或@StateObject绑定ViewModel的数据;
  • ViewModel承担原MVC中控制器的业务逻辑、数据处理、状态管理职责,通过@Published等属性向View传递状态更新;
  • 整个流程里没有中间的控制器,View和ViewModel直接完成数据绑定与交互。

举个简单的SwiftUI MVVM示例:

// ViewModel
class TodoListViewModel: ObservableObject {
    @Published var todos: [String] = ["买牛奶", "写代码"]
    
    func addTodo(_ todo: String) {
        todos.append(todo)
    }
}

// View
struct TodoListView: View {
    @StateObject private var viewModel = TodoListViewModel()
    @State private var newTodo = ""
    
    var body: some View {
        List {
            HStack {
                TextField("输入新待办", text: $newTodo)
                Button("添加") {
                    viewModel.addTodo(newTodo)
                    newTodo = ""
                }
            }
            ForEach(viewModel.todos, id: \.self) { todo in
                Text(todo)
            }
        }
    }
}

这个例子里没有任何控制器,View直接和ViewModel交互,完全符合MVVM的设计。

2. UIKit下的MVVM:控制器依然存在,但职责被弱化

在UIKit框架中,ViewController是无法被完全移除的——它要负责管理View的生命周期(比如viewDidLoad、viewWillAppear)、导航跳转、响应系统事件(比如旋转、内存警告)等与UI框架强绑定的工作。但在MVVM架构下,控制器的职责会被大幅精简:

  • 只做UI层的调度工作:比如把ViewModel的数据绑定到UI组件,把用户交互事件转发给ViewModel处理;
  • 不再承担业务逻辑,所有的业务决策、数据处理都交给ViewModel。

总结

你之前的理解没错:在SwiftUI的MVVM里,确实没有传统控制器的位置;而那篇文章的内容针对的是UIKit场景,所以才会提到控制器的角色,两者并不冲突。

内容的提问来源于stack exchange,提问作者Timo Ernst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:15:34