【发布时间】:2021-12-15 12:59:57
【问题描述】:
我有一个简单的结构,它是可解码/可编码和可散列的。
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 添加到主Swift 视图,但它仍然不起作用。
有没有办法让 View 绑定到 Struct 属性,并让TextField 更改这些属性?这感觉像是一件微不足道的事情,但出于某种原因对我来说是不可撤销的。
感谢您的指点!
【问题讨论】:
-
因为您正在处理 JSON,请尝试使用带有自定义
{get set}的变量的ObservableObject,相应地读取/写入您的 JSON,并在set的末尾使用objectWillChange.send()来刷新