gpt4 book ai didi

ios - SwiftUI ViewModel 发布的属性和绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 17:35:32 26 4
gpt4 key购买 nike

我的问题可能是误解的结果,但我无法弄清楚,所以这里是:

当使用像 TextField 这样的组件或任何其他需要绑定(bind)作为输入的组件时

TextField(title: StringProtocol, text: Binding<String>)

还有一个带有 ViewModel 的 View,我自然认为我可以简单地通过我的 ViewModel @Published作为绑定(bind)的属性:
class MyViewModel: ObservableObject { 
@Published var title: String
@Published var text: String
}

// Now in my view
var body: some View {
TextField(title: myViewModel.title, text: myViewModel.$text)
}

但我显然不能,因为发布者不能充当约束力。据我了解,只有 @State属性可以那样做,但不应该所有 @State属性只存在于 View 中而不存在于 View 模型中?或者我可以做这样的事情:
class MyViewModel: ObservableObject { 
@Published var title: String
@State var text: String
}

如果我不能,当我的文本更新时,如何将信息传输到我的 ViewModel?

最佳答案

你快到了。您只需更换 myViewModel.$text$myViewModel.text .

class MyViewModel: ObservableObject {

var title: String = "SwiftUI"

@Published var text: String = ""
}

struct TextFieldView: View {

@ObservedObject var myViewModel: MyViewModel = MyViewModel()

var body: some View {
TextField(myViewModel.title, text: $myViewModel.text)
}
}
TextField预计 Binding (对于 text 参数)和 ObservedObject属性包装器负责创建到 MyViewModel 的绑定(bind)。的属性使用动态成员查找。

关于ios - SwiftUI ViewModel 发布的属性和绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61469773/

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