.taggle()的基本用法

139 阅读1分钟

在 SwiftUI 中,.toggle() 是用于 切换(Toggle)控件 的修饰符或方法,主要用于控制布尔值(Bool)的状态切换。它通常与 @State@Binding@ObservedObject 等属性包装器结合使用,实现用户交互与数据绑定的联动。


1. Toggle 控件的基本用法

Toggle 是一个开关样式的交互控件(类似 UIKit 的 UISwitch),允许用户在 开(true关(false 之间切换。

示例代码:

struct ContentView: View {
    @State private var isOn = false // 控制开关状态

    var body: some View {
        Toggle("启用功能", isOn: $isOn) // 绑定到 isOn
            .padding()
    }
}

效果

  • 显示一个带标签的开关,点击会切换 isOn 的值(true/false)。

2. .toggle() 方法的作用

.toggle() 是 Swift 中 Bool 类型的原生方法,用于 快速取反布尔值。在 SwiftUI 中,可以通过按钮或其他交互触发它来手动切换状态。

示例:通过按钮切换状态

struct ContentView: View {
    @State private var isOn = false

    var body: some View {
        VStack {
            Toggle("开关状态", isOn: $isOn)
            
            Button("手动切换") {
                isOn.toggle() // 调用 .toggle() 方法
            }
        }
        .padding()
    }
}

效果

  • 点击按钮会直接切换 isOn 的值,同时更新 Toggle 控件的状态。

3. 常见应用场景

场景 1:控制界面显示/隐藏

@State private var showDetails = false

var body: some View {
    VStack {
        Toggle("显示详情", isOn: $showDetails)
        
        if showDetails {
            Text("这里是详细内容...")
                .padding()
        }
    }
}

场景 2:保存用户偏好设置

// 结合 AppStorage 持久化存储
@AppStorage("isDarkMode") private var isDarkMode = false

var body: some View {
    Toggle("深色模式", isOn: $isDarkMode)
}

场景 3:自定义切换样式

Toggle("自定义样式", isOn: $isOn)
    .toggleStyle(SwitchToggleStyle(tint: .red)) // iOS 15+ 可自定义颜色

4. 与其他控件的结合

Button 结合

Button(action: { isOn.toggle() }) {
    Label("切换状态", systemImage: isOn ? "poweron" : "poweroff")
}

ForEach 动态列表结合

struct Task: Identifiable {
    let id = UUID()
    var name: String
    var isCompleted: Bool
}

struct TaskView: View {
    @State private var tasks = [
        Task(name: "写作业", isCompleted: false),
        Task(name: "买菜", isCompleted: true)
    ]

    var body: some View {
        List {
            ForEach($tasks) { $task in
                Toggle(task.name, isOn: $task.isCompleted)
            }
        }
    }
}

5. 注意事项

  1. 数据绑定
    Toggle 必须绑定到一个 Bool 类型的变量(如 @State@Binding)。

  2. 样式适配

    • 在 iOS 上默认显示为开关(SwitchToggleStyle)。
    • 在 macOS 上默认显示为复选框(CheckboxToggleStyle)。
  3. 自定义样式
    通过 toggleStyle() 可修改样式:

    Toggle("复选框", isOn: $isOn)
        .toggleStyle(CheckboxToggleStyle()) // macOS 风格
    

总结

功能代码示例
创建开关Toggle("标签", isOn: $isOn)
手动切换布尔值isOn.toggle()
持久化存储@AppStorage("key") var isOn: Bool
自定义样式.toggleStyle(SwitchToggleStyle(tint: .red))

.toggle() 的核心作用
✅ 快速切换布尔值
✅ 实现用户交互与数据同步
✅ 构建开关、复选框等交互控件