gpt4 book ai didi

swiftui - 为什么我不能强制打开我的 $string 以用作 TextField 值?

转载 作者:行者123 更新时间:2023-12-05 02:42:41 24 4
gpt4 key购买 nike

这给了我以下错误:无法强制解包非可选类型的值 'Binding

我不明白为什么我不能强制打开绑定(bind)?

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)
}
}
}

最佳答案

当你声明一个 State在你的 View 中变量,你会得到一个 Binding通过添加前导值 $到变量的名称。所以,在你的代码中,你会有一个 $person绑定(bind)到可选的 Person类型。 $personBinding<Person?>

将值传递给TextField你需要一个Binding<String> .你不能强制展开 $person因为它不是可选值。这是一个Binding到可选类型。访问 name Person 内的字段结构,你需要一个 Binding<Person>反而。幸运的是,有一种方法可以得到你想要的。通过使用 this initializer ,你会得到一个 Binding<Person>? .请注意,现在不是 Binding到一个可选的,你有一个可选的Binding .您应该能够像这样使用这个新绑定(bind):

// Binding($person) returns Binding<Person>? 
TextField("", text: Binding($person)!.name)

更新:正如@Jessy 在评论中提到的,我们可以使用 map 而不是强制展开可选绑定(bind)。转换返回的 BindingTextField

var body: some View {
Binding($person).map {
TextField("", text: $0.name)
}
}

关于swiftui - 为什么我不能强制打开我的 $string 以用作 TextField 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67368230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com