Mengubah data struct di ForEach di SwiftUI

Sep 07 2020

Saya memiliki struct yang menguraikan data, dan kemudian kelas yang memiliki array dari struct tersebut.

struct Example: Codable, Identifiable {
     var id: UUID

     var title: String
     var description: String?

     var tags: [String]
}

class Examples: ObservableObject {
     @Published var examples = [Example]()
}

Lalu, saya memiliki ForEach yang menampilkan data dengan tombol:

ForEach(examples.examples) { example in
     VStack {
         Button("Complete") {
            example.completed = true
         }
         Text(example.title)
     }
}

Ketika saya mencoba untuk menjalankan, itu memberi saya kesalahan "Tidak dapat menetapkan ke properti: 'contoh' adalah konstanta 'biarkan'." Saya telah mencoba meneruskan contoh ke tampilan terpisah dengan @Binding var (dari posting ini ) dan juga memodifikasi data dengan indeks (dari posting ini ), tetapi keduanya memberi saya kesalahan yang mengatakan bahwa Xcode tidak dapat menghasilkan diagnostik melaporkan dan mengajukan umpan balik. Bagaimana cara saya mengubah data?

Maaf jika ini pertanyaan yang buruk, saya cukup baru mengenal SwiftUI

Jawaban

1 pawello2222 Sep 07 2020 at 05:56

Ini karena ForEach mengembalikan kepada Anda salinan hanya baca dari dokumen asli exampleuntuk dioperasikan dan Anda tidak dapat memodifikasinya. Dan bahkan jika Anda bisa, itu tidak akan menjadi struct yang sama (struct adalah tipe nilai).

Anda perlu mengakses item asli sebagai gantinya:

var body: some View {
    ForEach(examples.examples.indices) { index in
        VStack {
            Button("Complete") {
                examples.examples[index].completed = true
            }
            Text(examples.examples[index].title)
        }
    }
}