# @State、@Binding 等属性包装器

URL: https://caijiao.org/swift/13-swiftui-basics/02-property-wrappers
Source: docs/swift/13-swiftui-basics/02-property-wrappers.md
Description: 本章介绍 SwiftUI 中 @State、@Binding 等属性包装器，帮助开发者管理视图状态，实现数据绑定和响应式更新。

SwiftUI 使用属性包装器管理视图的状态和数据流，简化状态管理。

## @State

用于声明视图内部可变的状态变量，当状态变化时，视图自动刷新。

```swift
struct CounterView: View {
    @State private var count = 0

    var body: some View {
        VStack {
            Text("计数：\(count)")
            Button("增加") {
                count += 1
            }
        }
    }
}
````

## @Binding

用于在父子视图之间共享和绑定状态，子视图通过绑定修改父视图的状态。

```swift
struct ParentView: View {
    @State private var isOn = false

    var body: some View {
        ToggleView(isOn: $isOn)
    }
}

struct ToggleView: View {
    @Binding var isOn: Bool

    var body: some View {
        Toggle("开关", isOn: $isOn)
    }
}
```

## 其他常用属性包装器

* `@ObservedObject`：观察外部引用类型对象的变化。
* `@EnvironmentObject`：环境共享的数据对象。
* `@StateObject`：视图创建和管理的可观察对象。

## 总结

属性包装器是 SwiftUI 响应式编程的核心，简化了状态管理和视图更新流程。
