Swiftui 扩展中的Access环境变量
在Swiftui 扩展中的Access环境变量,swiftui,Swiftui,在视图中我可以使用@environment属性包装器访问环境变量,如下所示: struct MyView: View { @Environment(\.colorScheme) var colorScheme: Color var body: some View { Text("Hello") .foregroundColor(self.colorScheme == .light ? .black : .white) } }
视图中
我可以使用@environment
属性包装器访问环境变量,如下所示:
struct MyView: View {
@Environment(\.colorScheme) var colorScheme: Color
var body: some View {
Text("Hello")
.foregroundColor(self.colorScheme == .light ? .black : .white)
}
}
extension Color {
static var darkModeText: Color {
if Environment(\.colorScheme).wrappedValue == .light {
return .black
} else {
return .white
}
}
}
在扩展中,这是不可能的,因为我不能将变量放入扩展中。如何访问扩展中的@Environment
值,例如,如果要扩展Color
直到现在我才发现,我可以将Environment
与wrappedValue
属性一起使用,如下所示:
struct MyView: View {
@Environment(\.colorScheme) var colorScheme: Color
var body: some View {
Text("Hello")
.foregroundColor(self.colorScheme == .light ? .black : .white)
}
}
extension Color {
static var darkModeText: Color {
if Environment(\.colorScheme).wrappedValue == .light {
return .black
} else {
return .white
}
}
}
问题是,它不会得到更新,并且总是包含.light
。我还尝试使用@Environment
作为全局变量,但属性包装器(尚未)支持这一点。创建视图后,环境值将被注入视图中。在你尝试使用它的方式中,没有创造,所以没有注入——这是一种误解。你能描述一下你的最终目标吗?你打算在哪里/如何使用它?可能应该重新考虑查看修改器或自定义视图生成器等。我只想能够编写Color.darkModeText
,这样我就可以在项目中的任何地方访问它,而无需编写colorScheme==.light。黑色:。白色
然后在资产目录中定义这样的颜色,它将自动为您工作。哦,愚蠢的我,我看不到森林而看不到树木。几个小时前刚刚发现,您可以在资产目录中执行此操作。非常感谢你!我也有类似的问题。我想要一个“对比色”到当前的颜色。所以我不能使用“静态”xcassets解决方案。。。任何线索,或者有人知道原始“accentColor”在引擎盖下是如何工作的吗?在视图创建之后,环境值会被注入视图中。在你尝试使用它的方式中,没有创造,所以没有注入——这是一种误解。你能描述一下你的最终目标吗?你打算在哪里/如何使用它?可能应该重新考虑查看修改器或自定义视图生成器等。我只想能够编写Color.darkModeText
,这样我就可以在项目中的任何地方访问它,而无需编写colorScheme==.light。黑色:。白色
然后在资产目录中定义这样的颜色,它将自动为您工作。哦,愚蠢的我,我看不到森林而看不到树木。几个小时前刚刚发现,您可以在资产目录中执行此操作。非常感谢你!我也有类似的问题。我想要一个“对比色”到当前的颜色。所以我不能使用“静态”xcassets解决方案。。。有什么线索吗,或者有人知道最初的“accentColor”在引擎盖下是如何工作的吗?