Created
November 15, 2019 01:35
-
-
Save b3ll/4a2c44217a89111fb49002110b738f76 to your computer and use it in GitHub Desktop.
ModelBoundViewWrapper.swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //: A UIKit based Playground for presenting user interface | |
| import SwiftUI | |
| import UIKit | |
| import PlaygroundSupport | |
| public struct ObservedObjectWrapperView<Content: View, Model: ObservableObject>: View { | |
| @ObservedObject public var model: Model | |
| public let content: (ObservedObject<Model>.Wrapper) -> Content | |
| public init (model: Model, content: @escaping (ObservedObject<Model>.Wrapper) -> Content) { | |
| self.model = model | |
| self.content = content | |
| } | |
| public var body: some View { | |
| content($model) | |
| } | |
| } | |
| class SynthModel: ObservableObject { | |
| @Published var volume: Float = 0.5 { | |
| didSet { | |
| print("\(volume)") | |
| } | |
| } | |
| func view<Content: View>(content: @escaping (ObservedObject<SynthModel>.Wrapper) -> Content) -> ObservedObjectWrapperView<Content, SynthModel> { | |
| return ObservedObjectWrapperView(model: self, content: content) | |
| } | |
| } | |
| struct VolumeKnob: View { | |
| @Binding var volume: Float | |
| var body: some View { | |
| return Slider(value: _volume) | |
| } | |
| } | |
| var synthModel = SynthModel() | |
| let volumeKnobViewController = UIHostingController(rootView: synthModel.view { VolumeKnob(volume: $0.volume) }) | |
| // Present the view controller in the Live View window | |
| PlaygroundPage.current.liveView = volumeKnobViewController |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment