struct ContentView: View {
@State private var name = ""
var body: some View {
NavigationView {
VStack {
// name前添加$
TextField("Placeholder", text: $name)
Text("name")
Spacer()
}
.navigationBarTitle("SwiftUI")
}
}
}
Swift
区分了在此处显示此属性的值
和在此处显示此属性的值,但将任何更改写回该属性
。
在Swift
中,我们用一个特殊的符号来标记这些双向绑定,这样它们就很显眼:我们在它们前面写一个美元符号$
。这告诉Swift
,它应该读取属性的值,但也应该在发生任何更改时将其写回。
$属性名
:表示创建了一个双向绑定,属性值可读,可写。
举栗子:
struct ContentView: View {
let students = ["Tom", "Lily", "Ti"]
@State private var selectedStudent = 1
var body: some View {
NavigationView {
List {
Picker("Select you student", selection: $selectedStudent) {
ForEach(0..<students.count) {
Text(self.students[$0])
}
}
Text("选择的学生:\(students[selectedStudent])")
}
.navigationBarTitle("SwiftUI")
}
}
}
image.png
$selectedStudent
表示进行了双向绑定,初始值为1,默认显示第二个,同时滑动picker
时也会改变值。