swift - SwiftUI TextField 绑定到一个简单的模型(非类结构)
问题描述
我有一个简单的结构,它是可解码/可编码和可散列的。
public struct Field: Codable, Hashable {
let key: String
enum CodingKeys: String, CodingKey {
case key
}
}
在我的 SwiftUI 中,我正在创建一个数组,我想在其中添加和删除并绑定到 Struct 值。但我收到错误,即 Struct 不是绑定。
let decodableJSON = """
{
"key": ""
}
"""
let settableInit: Field = try! JSONDecoder().decode(Field.self, from: decodableJSON.data(using: .utf8)!)
struct Test_view: View {
@State
var settableFields: [Field] = [settableInit]
var body: some View {
ForEach(settableFields, id: \.key) { (settableField: Field) in
TextField("Key", text: settableField.key)
}
但是我得到一个错误,那settableField
不是绑定。我已经尝试将settableInit
@ObservableObject 作为一个 @ObservableObject 添加到主 Swift 视图中,但它仍然不起作用。
有没有办法让 View 绑定到 Struct 属性并TextField
更改这些属性?这感觉像是一件微不足道的事情,但由于某种原因对我来说是不可撤销的。
感谢您的任何指点!
解决方案
在Xcode13 中,您可以使用新的元素绑定语法:
public struct Field: Codable, Hashable {
var key: String
enum CodingKeys: String, CodingKey {
case key
}
}
struct Demo: View {
@State var settableFields: [Field] = [Field(key: "1"), Field(key: "2")]
var body: some View {
ForEach($settableFields, id: \.key) { $settableField in
TextField("Key", text: $settableField.key)
}
}
}
在早期版本的 Xcode 中,您可以使用数组的索引:
struct Demo: View {
@State var settableFields: [Field] = [Field(key: "1"), Field(key: "2")]
var body: some View {
ForEach(settableFields.indices, id: \.self) { index in
TextField("Key", text: $settableFields[index].key)
}
}
}
推荐阅读
- r - dplyr 中的 stringi 函数
- json - 无法访问打字稿中的嵌套 JSON 数据 - Angular6
- android - android webview 显示其字体的默认字体系列是什么?
- schedule - 无法选择日程
- c++ - 如何从用户接收多个字符串并将这些字符串添加到 C++ 中的数组中?
- javascript - 当内容显然正确时,如何修复返回代码 0 的 XMLHttpRequest.open()?
- react-native - 如何在反应原生地图中显示放大/缩小按钮
- android - 当键盘可见时 NavigationBarColor 不适用
- html - 如何使用花括号作为 Div 的左右边界
- php - get_the_date 调用未在循环中填充