SwiftUI 常用 Property Wrappers 之 StateObject
🧠🔋
对于 ObservableObject 当我们在一个 View 里创建,在这个 View 里使用,使用 ObservedObject 没问题,当这个ObservableObject 在下一个 View 里也使用的时候,那么在第一个 View 里初始化的时候最好使用 State Object,使用StateObject 创建 Object 的 View 会保持和 Object 的同步,避免某些时候导致的 View 存在但是 Object 已经被销毁的情况。
struct StateObjectView: View {
@StateObject var user = PokeUser()
@State var show = false
var body: some View {
Button {
show.toggle()
} label: {
VStack(spacing: 16) {
Text("Show")
Text("Number: \(user.number)")
}
}.sheet(isPresented: $show) {
StateObjectDetailView(user: user)
}
}
}
struct StateObjectDetailView: View {
@ObservedObject var user: PokeUser
var body: some View {
Button {
user.number += 1
} label: {
Text("Number +1, Number: \(user.number)")
}
}
}
class PokeUser: ObservableObject {
@Published var number = 0
}
可以看到在第一个初始 View 里我们使用 StateObject 创建了 user,在后面的 StateObjectDetailView 我们使用Observedobject 来使用 user,当在第二个页面的 user number 变化的时候,相应的第一个页面的 user number 也会一样跟随变化。