Go diving in SwiftUI's EnvironmentValues or use common values exposed for you.
This uses reflection under the hood. That means this is:
- Probably incredibly unstable
- Will almost definitely change
- May behave incorrectly on different versions of iOS
Currently, this has been tested on iOS 15.0 -> iOS 15.2.
Splunk can be used to locate any values in Environment, there are a few ways to do that:
import Splunk
import SwiftUI
struct ContentView: View {
@Environment(\.self)
private var env
var body: some View {
Text("Hello!")
.foregroundColor(env.value(of: "ForegroundColorKey"))
}
}
import Splunk
import SwiftUI
struct ContentView: View {
@Environment(\.colors.foregroundColor)
private var foregroundColor
var body: some View {
Text("Hello!")
.foregroundColor(foregroundColor)
}
}
import Splunk
import SwiftUI
struct ContentView: View {
var body: some View {
InnerView()
.buttonBorderShape(.capsule)
}
}
struct InnerView: View {
@Environment(\.buttonBorderShape)
private var buttonBorderShape
var body: some View {
if let shape = buttonBorderShape, shape == .capsule {
Text("Never Capsule!")
} else {
Button("Okay, capsule is cool.") {
// do something amazing.
}
}
}
}
extension EnvironmentValues {
var buttonBorderShape: ButtonBorderShape? {
get { value(of: "ButtonBorderShapeKey") }
}
}
Splunk is released under the MIT license. See LICENSE for details.