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”在引擎盖下是如何工作的吗?