首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SwiftUI-Environment

SwiftUI-Environment

作者头像
YungFan
发布2025-05-20 09:53:37
发布2025-05-20 09:53:37
13900
代码可运行
举报
文章被收录于专栏:学海无涯学海无涯
运行总次数:0
代码可运行

介绍

Environment 是 SwiftUI 中一个独特而强大的功能,它不仅可以提供系统层面的环境信息,如colorScheme(颜色模式)、locale(本地化设置)等,还能获取与特定视图相关的状态,如presentationMode(控制视图的显示与关闭)。通过合理使用 Environment,可以让视图在保持独立性的同时具备对外部上下文的感知能力,是构建可维护 SwiftUI 应用的重要工具。

设置

通过environment修饰符可以设置 Environment 的值。

代码语言:javascript
代码运行次数:0
运行
复制
// 设置,第1个参数是KeyPath,第2个参数是对应的值
ContentView().environment(\.colorScheme, .light)

获取

通过@Environment属性包装可以获取 Environment 的值。

代码语言:javascript
代码运行次数:0
运行
复制
import SwiftUI

struct ContentView: View { 
    // 获取,参数与设置时的KeyPath一致   
    @Environment(\.colorScheme) var colorScheme
    
    var body: some View {
        Group {
            if colorScheme == .dark {
                VStack {
                    Text("Hello")
                    
                    Text("SwiftUI")
                }
            }
            else {
                HStack {
                    Text("Hello")
                    
                    Text("SwiftUI")
                }
            }
        }
    }
}

自定义

Environment 支持自定义,可以创建一个自定义EnvironmentKey,然后将所需的设置放到EnvironmentValues中提供给外界使用。步骤如下。

  • 遵守EnvironmentKey协议,提供默认值。
代码语言:javascript
代码运行次数:0
运行
复制
struct ColorKey: EnvironmentKey {
    static var defaultValue: Color = .red
}
  • 扩展EnvironmentValues,提供计算属性,该属性就是使用@Environment时的参数 KeyPath。
代码语言:javascript
代码运行次数:0
运行
复制
extension EnvironmentValues {
    var customColor: Color {
        get{ self[ColorKey.self] }
        set{ self[ColorKey.self] = newValue }
    }
}
  • 使用。
代码语言:javascript
代码运行次数:0
运行
复制
import SwiftUI

struct ContentView: View {  
    @Environment(\.customColor) var customColor
    
    var body: some View {
        HStack {
            Text("Hello")
            
            Text("SwiftUI")
        }
        .foregroundColor(customColor) // 使用customColor 
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
// 设置Environment值
ContentView().environment(\.customColor, .blue)

常见Environment

代码语言:javascript
代码运行次数:0
运行
复制
// 编辑模式
@Environment(\.editMode) var editMode
// 颜色模式
@Environment(\.colorScheme) var colorScheme
// 可判断iPhone与iPad
@Environment(\.horizontalSizeClass) var horizontalSizeClass
// 关闭Modal
@Environment(\.presentationMode) var presentationMode
// 系统字体大小
@Environment(\.sizeCategory) private var category
// 本地化
@Environment(\.locale) var locale
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 设置
  • 获取
  • 自定义
  • 常见Environment
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档