返回
SwiftUI 属性包装器系列 --- @State @Binding
iOS
2024-01-04 09:20:46
SWIFTUI 属性包装器:全面指南
什么是 SwiftUI 属性包装器?
想象一下,您可以将特殊能力赋予您的属性,例如存储状态或将它们与其他属性联系起来。这就是 SwiftUI 属性包装器所做的事情。它们是通过在属性声明前添加 @
符号来使用的修饰符。
@State 属性包装器
当您需要在视图中创建状态变量时,请使用 @State
。状态变量是视图的私有属性,当其值发生变化时,视图将自动刷新。
struct ContentView: View {
@State private var count = 0
var body: some View {
VStack {
Text("Count: \(count)")
Button("Increment Count") {
count += 1
}
}
}
}
@Binding 属性包装器
如果您希望将视图中的属性与另一个对象或视图中的属性连接起来,@Binding
是您的朋友。这意味着当一个属性的值发生变化时,另一个属性的值也会同步更新。
struct ContentView: View {
@Binding var count: Int
var body: some View {
VStack {
Text("Count: \(count)")
Button("Increment Count") {
count += 1
}
}
}
}
@State 和 @Binding 的区别
- 范围:
@State
仅限于视图,而@Binding
可用于视图和模型。 - 数据类型:
@State
可存储任何类型,而@Binding
仅限于引用类型。 - 目的:
@State
管理视图状态,而@Binding
用于数据绑定。
何时使用 @State 和 @Binding
使用 @State
:
- 当您需要管理私有视图状态时。
- 当您不需要与其他属性绑定时。
使用 @Binding
:
- 当您需要与另一个属性绑定时。
- 当您需要在模型中存储视图状态时。
示例:购物清单应用程序
考虑一个简单的购物清单应用程序:
struct ContentView: View {
@State private var items = ["Milk", "Eggs", "Bread"]
var body: some View {
// ...
}
}
@State
在这里用于管理购物清单项目的状态。
结论
属性包装器是 SwiftUI 中强大的工具,可增强您的属性并简化您的代码。 @State
和 @Binding
是管理状态和绑定数据的核心包装器。通过了解它们的区别和何时使用它们,您可以提升您的 SwiftUI 开发技能。
常见问题解答
-
属性包装器只用于 SwiftUI 吗?
- 不,它们也可以在其他 Apple 框架中使用,例如 Combine。
-
我可以使用多个属性包装器吗?
- 是的,您可以将多个属性包装器应用于同一个属性,例如
@State @Binding
。
- 是的,您可以将多个属性包装器应用于同一个属性,例如
-
是否有其他属性包装器可用?
- 是的,还有其他属性包装器,例如
@Environment
和@ObservedObject
。
- 是的,还有其他属性包装器,例如
-
属性包装器需要什么 Swift 版本?
- 它们从 Swift 5.1 开始可用。
-
它们是如何工作的?
- 属性包装器通过提供代理属性来工作,该代理属性具有包装器定义的行为。