笔记笔记
  • Home
  • AI&ML
  • Example
  • Zoo
  • 关于
⌘ K
Swift
SwiftUI Tips
SwiftUI 组件 Demo
SVG
语言
iOS Simulator APP 沙盒地址
最后更新时间:
Copyright © 2023-2024 | Powered by dumi | GuoDapeng | 冀ICP备20004032号-1 | 冀公网安备 冀公网安备 13024002000293号

TABLE OF CONTENTS

SwiftUI Tips

@StateObject 与 @ObservedObject

在大多数情况下,我们都应该使用 @StateObject 来创建和管理视图模型。 共享数据对象,临时性视图模型,性能优化场景下,使用 @ObservedObject 可能是更好的选择。

@StateObject

swift
import SwiftUI
struct DemoModel {
var title: String = "Demo Title"
}
class DemoViewModel: ObservableObject {
@Published var model: DemoModel = DemoModel()
}
struct DemoView: View {
/// 视图的声明周期内,SwiftUI 不会创建新实例 viewModel,viewModel 的生命周期被自动管理。
@StateObject private var viewModel: DemoViewModel = DemoViewModel()
var body: some View {
Text(viewModel.model.title)
}
}
#Preview {
DemoView()
}

@ObservedObject

swift
import SwiftUI
struct DemoModel {
var title: String = "Demo Title"
}
class DemoViewModel: ObservableObject {
@Published var model: DemoModel = DemoModel()
}
struct DemoView: View {
/// 视图不拥有对象,只是引用和观察外部提供的对象
@ObservedObject private var viewModel: DemoViewModel
init(viewModel: DemoViewModel) {
self.viewModel = viewModel
}
var body: some View {
Text(viewModel.model.title)
}
}
#Preview {
let viewModel = DemoViewModel()
return DemoView(viewModel: viewModel)
/// 在 Xcode 中是不需要 return 显式返回值的
}