首页 > 其他分享 >swiftUI-@Environment的作用

swiftUI-@Environment的作用

时间:2024-08-25 09:05:16浏览次数:10  
标签:customValue struct 自定义 Environment swiftUI var 作用 View

@Environment 是 SwiftUI 中的一个属性包装器,用于从环境中读取共享的数据。环境(Environment)是一个全局的、可以在视图层次结构中传递的值集合。通过使用 @Environment,你可以在视图中访问这些共享的环境值,而不需要显式地传递它们。

@Environment 的常见用途包括访问系统提供的环境值(如颜色方案、字体、尺寸类别等),以及自定义的环境值。

以下是 @Environment 的一些常见用途和示例:

访问系统提供的环境值

import SwiftUI

struct ContentView: View {
    @Environment(\.colorScheme) var colorScheme

    var body: some View {
        Text("当前颜色方案是 \(colorScheme == .dark ? "暗色模式" : "亮色模式")")
            .padding()
            .background(colorScheme == .dark ? Color.black : Color.white)
            .foregroundColor(colorScheme == .dark ? Color.white : Color.black)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在这个示例中,@Environment(\.colorScheme) 用于访问当前的颜色方案(亮色模式或暗色模式),并根据颜色方案动态调整视图的背景色和前景色。

自定义环境值

你还可以创建和使用自定义的环境值。首先,定义一个环境键和默认值:

import SwiftUI

struct CustomEnvironmentKey: EnvironmentKey {
    static let defaultValue: String = "默认值"
}

extension EnvironmentValues {
    var customValue: String {
        get { self[CustomEnvironmentKey.self] }
        set { self[CustomEnvironmentKey.self] = newValue }
    }
}

然后,在视图中使用 @Environment 访问自定义的环境值:

struct ContentView: View {
    @Environment(\.customValue) var customValue

    var body: some View {
        Text("自定义环境值: \(customValue)")
            .padding()
    }
}

struct ParentView: View {
    var body: some View {
        ContentView()
            .environment(\.customValue, "新的自定义值")
    }
}

struct ParentView_Previews: PreviewProvider {
    static var previews: some View {
        ParentView()
    }
}

在这个示例中,我们定义了一个自定义的环境键 CustomEnvironmentKey 和一个扩展 EnvironmentValues 来添加 customValue 属性。然后,我们在 ParentView 中使用 .environment 修饰符来设置自定义的环境值,并在 ContentView中通过 @Environment 访问这个值。

通过使用 @Environment,你可以在视图层次结构中方便地共享和访问全局数据,而不需要显式地传递这些数据。

标签:customValue,struct,自定义,Environment,swiftUI,var,作用,View
From: https://www.cnblogs.com/Aliancn/p/18378650

相关文章

  • swiftUI-extension的使用
    在Swift中,extension关键字用于为现有的类、结构体、枚举或协议添加新的功能,而无需修改原始源代码。扩展可以添加新的方法、计算属性、初始化器、下标、嵌套类型和遵循协议等。以下是一些常见的extension用法示例:为类添加方法extensionString{funcreversedString()......
  • swiftUI-@Bindable和@Binging的作用
    在SwiftUI中,@Bindable和@Binding是用于管理和传递数据的属性包装器。它们在SwiftUI的数据流和状态管理中起着重要作用。@Binding@Binding是一个属性包装器,用于在父视图和子视图之间共享数据。它允许子视图读取和写入父视图的状态,而不需要直接持有该状态的所有权。@Bindi......
  • C++基础/限定符及一些关键字在限定函数的作用
    在学习中发现对const在限定函数的作用有些模糊,以下为笔者的学习总结1.5cv限定符及一些关键字在限定函数的作用c(const)v(volatile)const:用于表示该函数不会改变类的成员变量,所以是可以修改全局变量的volatile:用于告诉编译器该对象可能会被程序外部修改#include<iostream>......
  • Android Kotlin优化代码整洁:with、applay以及run是什么,作用,区别
    目录为什么需要使用with、applay以及runwith、applay以及run是什么、作用以及三者区别一、为什么需要使用with、applay以及run我们在开发项目的过程当中,不可避免,一个界面的内容会有很多,如下initivew方法,会有Recyclerview的初始化,长按以及触摸事件设置,以及生命周期的注册,主......
  • 【Kubernetes】Kubernetes 安装后.kube/config文件作用以及位置
    1.概述首先参考上一篇文章:【Flink】Mac下使用flink-kubernetes-operator本地运行flink程序在上一篇文章中我本地运行起来一个k8s案例,然后在我做使用代码提交任务到k8s的时候报错找不到/root/.kube/config然后我就突然我本地是不是不是这个目录呢?一找果然找到了lcc@lcc......
  • 【kubernetes】The LocalStreamEnvironment cannot be used when submitting
    1.概述新手上路,首先参考文章:【Flink】Mac下使用flink-kubernetes-operator本地运行flink程序在这个文章中,我们知道了如何使用demo提交flink任务。但是如果我们的机器没有kubectl命令,我们改怎么提交任务到flink呢?这里我们可以使用代码提交,此处文章参考:【kubernetes】使......
  • C++学习, 变量作用域
    从广义上看,有三个地方,可以声明变量:在函数或块中声明的变量,为局部变量。在函数参数定义的变量,为形式参数。在所有函数之外的变量,为全局变量。局部变量(LocalVariables)在函数或块内声明的变量是局部变量。它们只能由该函数或代码块中的语句使用。本地变量不为其自......
  • 局部作用域
    //局部作用域分为两种函数作用域块作用域//局部作用域//函数作用域//在函数内部声明的变量只能在函数内部访问外部无法访问functionfun(){//函数内部是函数作用域属于局部变量constnum=10}console.log(num);//此处报错函数外部不......
  • Shopee开店防关联:海外IP代理的作用与选择
    随着全球化的发展,跨境电商成为很多商家拓展市场的重要途径。但相信很多人也听说,跨境电商的主要平台正在大规模调查IP问题。除了亚马逊,还有Shopee平台。许多卖家在开店时遇到异常阻碍,不仅新账户注册失败,而且正在运营的店铺也收到警告,店铺可能将被冻结。经过一些了解,问题的共同......
  • 消息队列作用(解耦、异步、削峰)
    原文:消息队列作用(解耦、异步、削峰)图详解一、消息队列简介简单来说,“消息队列”是在消息的传输过程中保存消息的容器。MQ全称为MessageQueue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信。消息传递指的是程......