SwiftUI vs UIKit
Apple 现代声明式框架 SwiftUI 与久经考验的 UIKit 之间的全面对比。2025 年你该选择哪个框架?
移动优先的反应式数据库
Apple 的对象图框架
| 分类 | Realm | Core Data |
|---|---|---|
| 性能 | 9/10 | 8/10 |
| 学习难易度 | 8/10 | 4/10 |
| 生态系统 | 7/10 | 9/10 |
| 社区 | 7/10 | 8/10 |
| 就业市场 | 6/10 | 8/10 |
| 面向未来 | 7/10 | 8/10 |
// Realm Swift — 反应式数据模型
import RealmSwift
// 数据模型
class Task: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var id: ObjectId
@Persisted var title: String = ""
@Persisted var isCompleted: Bool = false
@Persisted var createdAt: Date = Date()
}
// 在 SwiftUI 中反应式使用
struct TaskListView: View {
@ObservedResults(Task.self) var tasks
var body: some View {
List {
ForEach(tasks) { task in
TaskRow(task: task)
}
}
.toolbar {
ToolbarItem {
Button("添加") {
$tasks.append(Task())
}
}
}
}
}// Core Data + SwiftData — iOS 17+ 现代方案
import SwiftData
import SwiftUI
// SwiftData 模型(使用 @Model 宏)
@Model
class Task {
var id: UUID
var title: String
var isCompleted: Bool
var createdAt: Date
init(title: String) {
self.id = UUID()
self.title = title
self.isCompleted = false
self.createdAt = Date()
}
}
// 在 SwiftUI 中使用
struct TaskListView: View {
@Environment(\.modelContext) private var context
@Query(sort: \.createdAt) var tasks: [Task]
var body: some View {
List(tasks) { task in
Text(task.title)
.strikethrough(task.isCompleted)
}
}
func addTask() {
let task = Task(title: "新任务")
context.insert(task)
}
}对于需要跨平台和实时同步的项目,Realm 明显领先。而只面向 Apple 平台、需要 CloudKit 集成或希望与 Xcode 生态深度契合的项目,Core Data(或 iOS 17+ 上的 SwiftData)则是更自然的选择。
获取免费咨询SwiftData(iOS 17+)是用 @Model 宏和 Swift 原生 API 对 Core Data 的现代化改造,底层仍依赖 Core Data,但大幅减少了样板代码。新项目应优先选择 SwiftData,遗留项目可以继续留在 Core Data 上。