在 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. 注意事项
-
数据绑定:
Toggle必须绑定到一个Bool类型的变量(如@State、@Binding)。 -
样式适配:
- 在 iOS 上默认显示为开关(
SwitchToggleStyle)。 - 在 macOS 上默认显示为复选框(
CheckboxToggleStyle)。
- 在 iOS 上默认显示为开关(
-
自定义样式:
通过toggleStyle()可修改样式:Toggle("复选框", isOn: $isOn) .toggleStyle(CheckboxToggleStyle()) // macOS 风格
总结
| 功能 | 代码示例 |
|---|---|
| 创建开关 | Toggle("标签", isOn: $isOn) |
| 手动切换布尔值 | isOn.toggle() |
| 持久化存储 | @AppStorage("key") var isOn: Bool |
| 自定义样式 | .toggleStyle(SwitchToggleStyle(tint: .red)) |
.toggle() 的核心作用:
✅ 快速切换布尔值
✅ 实现用户交互与数据同步
✅ 构建开关、复选框等交互控件