Observable
Skip support for Observable state ↗ on Android. Consult the SkipUI module for a complete list of supported SwiftUI.
The following example screens and source code is from SkipUI’s
Showcase sample app
ObservablePlayground.swift ↗
import SwiftUI#if canImport(Observation)import Observation#endif
struct ObservablePlayground: View { var body: some View { if #available(iOS 17.0, macOS 14.0, *) { ObservablesOuterView() .environmentObject(PlaygroundEnvironmentObject(text: "initialEnvironment")) .toolbar { PlaygroundSourceLink(file: "ObservablePlayground.swift") } } else { Text("iOS 17 / macOS 14 required for Observation framework") } }}
class PlaygroundEnvironmentObject: ObservableObject { @Published var text: String init(text: String) { self.text = text }}
@available(iOS 17.0, macOS 14.0, *)@Observable class PlaygroundObservable { var text = "" init(text: String) { self.text = text }}
@available(iOS 17.0, macOS 14.0, *)struct ObservablesOuterView: View { @State var stateObject = PlaygroundObservable(text: "initialState") @EnvironmentObject var environmentObject: PlaygroundEnvironmentObject var body: some View { VStack { Text(stateObject.text) Text(environmentObject.text) ObservablesObservableView(observable: stateObject) .border(Color.red) ObservablesBindingView(text: $stateObject.text) .border(Color.blue) } }}
@available(iOS 17.0, macOS 14.0, *)struct ObservablesObservableView: View { let observable: PlaygroundObservable @EnvironmentObject var environmentObject: PlaygroundEnvironmentObject var body: some View { Text(observable.text) Text(environmentObject.text) Button("Button") { observable.text = "observableState" environmentObject.text = "observableEnvironment" } }}
struct ObservablesBindingView: View { @Binding var text: String var body: some View { Button("Button") { text = "bindingState" } .accessibilityIdentifier("binding-button") }}