Sor*_*ica 5 ios swift swiftui combine
ContentView2model.value更改时不刷新视图,如果直接Model符合ObservableObject而不是继承SuperModel则可以正常工作
class SuperModel: ObservableObject {
}
class Model: SuperModel {
@Published var value = ""
}
struct ContentView2: View {
@ObservedObject var model = Model()
var body: some View {
VStack {
Text(model.value)
Button("change value") {
self.model.value = "\(Int.random(in: 1...10))"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是您示例的工作变体。看到为了能够工作,不仅需要链接发布者,而且至少需要一个 Published 属性。左右,它可以在某些情况下有所帮助。
import SwiftUI
class SuperModel: ObservableObject {
// this is workaround but not real trouble.
// without any value in supermodel there is no real usage of SuperModel at all
@Published var superFlag = false
}
class Model: SuperModel {
@Published var value = ""
override init() {
super.init()
_ = self.objectWillChange.append(super.objectWillChange)
}
}
struct ContentView: View {
@ObservedObject var model = Model()
var body: some View {
VStack {
Text(model.value)
Button("change value") {
self.model.value = "\(Int.random(in: 1...10))"
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
将代码更改为
var body: some View {
VStack {
Text(model.value)
Button("change value") {
self.model.value = "\(Int.random(in: 1...10))"
}
Text(model.superFlag.description)
Button("change super flag") {
self.model.superFlag.toggle()
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可以同时看到如何使用你的超模
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |