SwiftUI vs UIKit
Apple 现代声明式框架 SwiftUI 与久经考验的 UIKit 之间的全面对比。2025 年你该选择哪个框架?
拥有 20 年积累、久经生产环境验证的 Apple 持久化框架
WWDC 2023 推出:Swift 原生、借助 @Model 宏实现零样板代码的持久化方案
| 分类 | Core Data | SwiftData |
|---|---|---|
| 性能 | 9/10 | 9/10 |
| 学习难易度 | 4/10 | 9/10 |
| 生态系统 | 9/10 | 6/10 |
| 社区 | 9/10 | 5/10 |
| 就业市场 | 8/10 | 6/10 |
| 面向未来 | 6/10 | 10/10 |
// Core Data - 待办事项列表 CRUD
import CoreData
class TodoRepository {
let container: NSPersistentContainer
init() {
container = NSPersistentContainer(name: "TodoModel")
container.loadPersistentStores { _, error in
if let error { fatalError("Failed: \(error)") }
}
}
func addTodo(title: String) {
let context = container.viewContext
let todo = Todo(context: context)
todo.title = title
todo.createdAt = Date()
try? context.save()
}
func fetchTodos() -> [Todo] {
let request = Todo.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(keyPath: \Todo.createdAt, ascending: false)]
return (try? container.viewContext.fetch(request)) ?? []
}
}// SwiftData - 待办事项列表 CRUD
import SwiftData
@Model
class Todo {
var title: String
var createdAt: Date
init(title: String) {
self.title = title
self.createdAt = Date()
}
}
struct TodoListView: View {
@Query(sort: \Todo.createdAt, order: .reverse) private var todos: [Todo]
@Environment(\.modelContext) private var context
func addTodo(title: String) {
let todo = Todo(title: title)
context.insert(todo)
try? context.save()
}
}如果目标是 iOS 17+,建议从 SwiftData 开始 —— 代码量更少、出错更少,并且与 SwiftUI 集成更好。如果需要支持旧设备、涉及复杂迁移或已有大型 Core Data 生产代码库,建议选择 Core Data。由于两者共享同一套底层基础设施,理论上可以混合使用。
获取免费咨询从长远来看会,这也是 Apple 投入的方向。但 Core Data 完全退场还需要数年时间 —— 现有的 Core Data 项目仍将持续获得支持。