Skip to content

Instantly share code, notes, and snippets.

@blladnar
Created June 19, 2021 00:37
Show Gist options
  • Save blladnar/4b2d1eb419151c5126c28d9da8646e92 to your computer and use it in GitHub Desktop.
Save blladnar/4b2d1eb419151c5126c28d9da8646e92 to your computer and use it in GitHub Desktop.
SwiftUI Model Updating Example
import SwiftUI
class Model {
var number: String = "One"
}
struct ContentView: View {
var body: some View {
Text("Broken")
BrokenView()
Divider()
Text("Hacky Fix")
HackyView()
Divider()
Text("Wrapper Fix")
WrapperView()
}
}
struct BrokenView: View {
let model = Model()
var body: some View {
Text(model.number)
Button("Change") {
model.number = ["One", "Two", "Three", "Four", "Five", "Six"].randomElement()!
}
}
}
struct HackyView: View {
let model = Model()
@State private var updater: Bool = false
var body: some View {
Text(model.number)
Button("Change") {
model.number = ["One", "Two", "Three", "Four", "Five", "Six"].randomElement()!
updater.toggle()
}
if updater {
EmptyView()
}
}
}
struct WrapperView: View {
@StateObject var model = PublishedModel(model: Model())
var body: some View {
Text(model.number)
Button("Change") {
model.number = ["One", "Two", "Three", "Four", "Five", "Six"].randomElement()!
}
}
class PublishedModel: ObservableObject {
let model: Model
init(model: Model) {
self.model = model
self.number = model.number
}
@Published var number: String {
didSet {
model.number = number
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment