Skip to content

Instantly share code, notes, and snippets.

@PaulWoodIII
Created July 29, 2019 22:57
Show Gist options
  • Select an option

  • Save PaulWoodIII/eca805e8b962863ec09e6caac59702b2 to your computer and use it in GitHub Desktop.

Select an option

Save PaulWoodIII/eca805e8b962863ec09e6caac59702b2 to your computer and use it in GitHub Desktop.
//: A UIKit based Playground for presenting user interface
import SwiftUI
import UIKit
import PlaygroundSupport
import Combine
class ObservingSource: BindableObject {
var someString: String = ""
var willChange = PassthroughSubject<String,Never>()
let subscriber = PassthroughSubject<String, Never>()
var cancelable: Cancellable?
// You can totally make this a generic BTW
public func someStringBinding() -> Binding<String> {
return Binding(
getValue: {
self.someString
},
setValue: {
self.subscriber.send($0)
self.someString = $0
}
)
}
init () {
cancelable = subscriber.print().makeConnectable().connect()
}
}
struct SimpleTextField: View {
@EnvironmentObject var observingSource: ObservingSource
@State var textFieldString: String = ""
var body: some View {
VStack {
TextField("Title", text: observingSource.someStringBinding())
}
}
}
let view = SimpleTextField().environmentObject(ObservingSource())
let viewController = UIHostingController(rootView: view)
PlaygroundPage.current.liveView = viewController
PlaygroundPage.current.needsIndefiniteExecution = true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment