From 22b5cb500fd42813543b1855d2d9e937a99de925 Mon Sep 17 00:00:00 2001 From: Zach Eriksen Date: Fri, 6 Aug 2021 21:53:33 -0500 Subject: [PATCH 1/2] Switch ObjectView back to ObservedObject --- Sources/ObjectUI/View/ObjectView.swift | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Sources/ObjectUI/View/ObjectView.swift b/Sources/ObjectUI/View/ObjectView.swift index d110763..d0ba9c3 100644 --- a/Sources/ObjectUI/View/ObjectView.swift +++ b/Sources/ObjectUI/View/ObjectView.swift @@ -8,16 +8,16 @@ import SwiftUI public struct ObjectView: View where Content: View { - @StateObject private var object: Object = Object() + @ObservedObject private var object: Object - private var content: (Object) -> Content + private let content: (Object) -> Content public init( data: Any? = nil, - content: @escaping (Object) -> Content + @ViewBuilder content: @escaping (Object) -> Content ) { + self.object = Object(data) self.content = content - self.object.consume(Object(data)) } public var body: some View { @@ -28,8 +28,11 @@ public struct ObjectView: View where Content: View { struct ObjectView_Previews: PreviewProvider { static var previews: some View { ObjectView(data: "Hello, World 👋") { object in - object.value(as: String.self).map { message in - Text(message) + if let text = object.value(as: String.self) { + Text(text) + } else { + ProgressView() + } } } From 6da95e9bcb827518fa753cb3483d8b7bee8e2c47 Mon Sep 17 00:00:00 2001 From: Zach Eriksen Date: Fri, 6 Aug 2021 21:53:42 -0500 Subject: [PATCH 2/2] Add StateObjectView --- Sources/ObjectUI/View/StateObjectView.swift | 41 +++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Sources/ObjectUI/View/StateObjectView.swift diff --git a/Sources/ObjectUI/View/StateObjectView.swift b/Sources/ObjectUI/View/StateObjectView.swift new file mode 100644 index 0000000..158b81a --- /dev/null +++ b/Sources/ObjectUI/View/StateObjectView.swift @@ -0,0 +1,41 @@ +// +// ObjectView.swift +// ObjectUI +// +// Created by Leif on 5/24/21. +// + +import SwiftUI + +public struct StateObjectView: View where Content: View { + @StateObject private var object: Object = Object() + + private let content: (Object) -> Content + + public init( + @ViewBuilder content: @escaping (Object) -> Content + ) { + self.content = content + } + + public var body: some View { + content(object) + } +} + +struct StateObjectView_Previews: PreviewProvider { + static var previews: some View { + StateObjectView { object in + if let text = object.value(as: String.self) { + Text(text) + } else { + ProgressView() + .onAppear { + DispatchQueue.main.asyncAfter(deadline: .now() + 3) { + object.set(value: "👋") + } + } + } + } + } +}