Mengubah data struct di ForEach di SwiftUI
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
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)
}
}
}