Skip to content

Instantly share code, notes, and snippets.

@dafurman
Last active November 13, 2023 22:51
Show Gist options
  • Save dafurman/c7d3e1cc5b9120b8948d9e5fc2620903 to your computer and use it in GitHub Desktop.
Save dafurman/c7d3e1cc5b9120b8948d9e5fc2620903 to your computer and use it in GitHub Desktop.
import SwiftUI
import Dependencies
private struct TextView: View {
let title: String
let text: String
var body: some View {
HStack {
Text(title)
Spacer()
Text(text)
}
.padding(.horizontal)
}
}
struct OuterView: View {
@Dependency(\.text) private var dependenciesText
@Environment(\.text) private var environmentText
var body: some View {
VStack {
Text("OuterView")
.font(.title)
TextView(title: "@Environment", text: environmentText)
TextView(title: "@Dependency", text: dependenciesText)
InnerView()
.padding()
}
.background(.cyan)
}
}
private struct InnerView: View {
@Dependency(\.text) private var dependenciesText
@Environment(\.text) private var environmentText
@StateObject private var model = Model()
var body: some View {
VStack {
Text("InnerView")
.font(.title)
TextView(title: "@Environment", text: environmentText)
TextView(title: "@Dependency", text: dependenciesText)
.foregroundColor(.red)
TextView(title: "Model", text: model.depText)
.foregroundColor(.red)
}
.background(.white)
}
}
class Model: ObservableObject {
@Dependency(\.text) var depText
}
struct OuterView_Previews: PreviewProvider {
static var previews: some View {
withDependencies {
$0.text = "Injected - withDependencies"
} operation: {
OuterView()
.environment(\.text, "Injected - .environment()")
}
}
}
// MARK: - Text Dependency
extension DependencyValues {
var text: String {
get { self[TextKey.self] }
set { self[TextKey.self] = newValue }
}
enum TextKey: TestDependencyKey {
static var liveValue = "N/A"
static var testValue = "defaultTestValue"
}
}
extension EnvironmentValues {
var text: String {
get { self[TextKey.self] }
set { self[TextKey.self] = newValue }
}
struct TextKey: EnvironmentKey {
static var defaultValue: String { "@Environment - Default Value" }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment