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时也会改变值。









网友评论