我有一個簡單的結構,它是可解碼/可編碼和可散列的。
public struct Field: Codable, Hashable {
let key: String
enum CodingKeys: String, CodingKey {
case key
}
}
在我的 SwiftUI 中,我正在創建一個陣列,我想在其中添加和洗掉以及系結到 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更改這些屬性?這感覺就像是一件微不足道的事情,但由于某種原因對我來說是無法挽回的。
感謝您的任何指點!
uj5u.com熱心網友回復:
在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)
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344347.html
下一篇:傳遞給不帶引數的呼叫的引數
