这给了我以下错误:无法强制解开非可选类型“Binding<Person?>”的值
我不明白为什么我不能强行解开绑定?
struct Person {
var name: String
}
struct ContentView: View {
@State private var person: Person? = Person(name: "Peter")
var body: some View {
if person != nil {
TextField("", text: $person!.name)
}
}
}
Run Code Online (Sandbox Code Playgroud)
State当您在视图中声明变量时,您将通过在变量名称中Binding添加前导来获取该值。$因此,在您的代码中,您将拥有一个$person绑定到可选Person类型的 a 。$person是Binding<Person?>
要将值传递给TextField您,您需要一个Binding<String>. 您不能强制解包,$person因为它不是可选值。这是Binding一个可选类型。要访问结构体name内部的字段Person,您需要 a Binding<Person>。幸运的是,有一种方法可以得到你想要的东西。通过使用这个初始化程序,您将拥有一个Binding<Person>?. 请注意,现在Binding您有一个可选的 ,而不是可选的 a Binding。您应该能够像这样使用这个新绑定:
// Binding($person) returns Binding<Person>?
TextField("", text: Binding($person)!.name)
Run Code Online (Sandbox Code Playgroud)
更新:正如@Jessy 在评论中提到的,我们可以使用将map返回的值转换Binding为TextField
var body: some View {
Binding($person).map {
TextField("", text: $0.name)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
630 次 |
| 最近记录: |