Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表的单元格视图中的SwiftUI update observedObject_Swiftui_Swiftui List_Observedobject - Fatal编程技术网

列表的单元格视图中的SwiftUI update observedObject

列表的单元格视图中的SwiftUI update observedObject,swiftui,swiftui-list,observedobject,Swiftui,Swiftui List,Observedobject,我试图更改被观察对象的值。该值将更改,但不会永久更改。当我向下滚动并向后滚动时,该值将更改回原始值。我猜是列表单元格视图中的@State问题。但我无法找出永久更改observedObject中数据的解决方案。那么,我应该怎么做才能通过使用数据单元永久地更改数据呢 struct ContentView: View { @ObservedObject var dataClass = DataClass() var body: some View { List(data

我试图更改被观察对象的值。该值将更改,但不会永久更改。当我向下滚动并向后滚动时,该值将更改回原始值。我猜是列表单元格视图中的@State问题。但我无法找出永久更改observedObject中数据的解决方案。那么,我应该怎么做才能通过使用数据单元永久地更改数据呢

struct ContentView: View {
    @ObservedObject var dataClass = DataClass()
    var body: some View {
        List(dataClass.data){ item in
            DataCell(item: item)
        }
    }
}
struct DataCell: View {
    @State var item : DataModal
    var body: some View{
        HStack{
            Text("\(item.num!)")
            Text("\(item.val!)").onTapGesture {
                item.val = 1
            }

        }
        .padding(.vertical, 100)
    }
}
struct DataModal : Identifiable {
    var id = UUID()
    var num : Int?
    var val : Int?
}
class DataClass : ObservableObject {
    @Published var data = [DataModal]()
    init(){
        load()
    }
    func load(){
        data = [DataModal(num: 1, val: 1),DataModal(num: 2, val: 2),DataModal(num: 3, val: 3),DataModal(num: 4, val: 4),DataModal(num: 5, val: 5),DataModal(num: 6, val: 6),DataModal(num: 7, val: 7),DataModal(num: 8, val: 8),DataModal(num: 9, val: 9),DataModal(num: 10, val: 10),DataModal(num: 11, val: 11),DataModal(num: 12, val: 12),DataModal(num: 13, val: 13)]
    }
}


传递DataModal的副本,因为它是值类型。在这种情况下,您需要将绑定传递到
dataClass
中的原始值,如

struct ContentView: View {
    @ObservedObject var dataClass = DataClass()
    var body: some View {
        List(dataClass.data.indices, id: \.self){ index in
            DataCell(item: $dataClass.data[index])
        }
    }
}

struct DataCell: View {
    @Binding var item : DataModal
    var body: some View{
        HStack{
            Text("\(item.num!)")
            Text("\(item.val!)").onTapGesture {
                item.val = 1
            }

        }
        .padding(.vertical, 100)
    }
}