Невозможно присвоить свойству: «квест» является константой «пусть»

Я хочу сделать приложение ToDo. Поэтому я сделал список, который берет данные из массива.

Массив работает со структурой и состоит из заголовка (строки) и логического значения, которое проверяет, выполнен ли «квест» или нет.

В ContentView вы можете увидеть список с заголовком и слева от него значок, который меняется в зависимости от того, как логическое значение «готово».

Когда я нажимаю на строку, я хочу, чтобы эта задача была проверена. Но изменить это логическое значение невозможно.

import SwiftUI

struct Quest: Identifiable{
    var title: String
    var done: Bool
    var id: String { title }
}

struct ContentView: View {
    
    var quests: [Quest] = [
        Quest(title: "Zimmer aufräumen", done: true),
        Quest(title: "Müll rausbringen", done: false),
        Quest(title: "Bad putzen", done: false)
    ]
    
    var done = false
        
    var body: some View {
        VStack{
            List(quests) { quest in
                Button {
                    quest.done = true. // <- Error
                } label: {
                    HStack{
                        if done == true {
                            Image(systemName: "checkmark.circle.fill")
                                .foregroundColor(Color("checked"))  // own Color
                            Text(quest.title)
                                .foregroundColor(.gray)

                        } else {
                            Image(systemName: "checkmark.circle")
                                .foregroundColor(Color(.gray))
                            Text(quest.title)
                                .foregroundColor(.black)

                        }
                    }
                }

            }
        }
    }
    
    func done(_ quest: inout Quest) {
        quest.done = true
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Я понятия не имею, что я могу сделать сейчас.

developer.apple.com/tutorials/swiftui
lorem ipsum 09.04.2023 22:25

Вам нужно использовать @State SwiftUI.

George 09.04.2023 23:13
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
2
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте этот подход, используя @State var quests и List($quests) { $quest..., он работает для меня.

struct ContentView: View {
    
    // --- here
    @State var quests: [Quest] = [
        Quest(title: "Zimmer aufräumen", done: true),
        Quest(title: "Müll rausbringen", done: false),
        Quest(title: "Bad putzen", done: false)
    ]
         
    var body: some View {
        VStack{
            List($quests) { $quest in  // <--- here
                Button {
                    quest.done.toggle()  // <--- here
                } label: {
                    HStack{
                        if quest.done {  // <--- here
                            Image(systemName: "checkmark.circle.fill")
                                .foregroundColor(Color("checked"))  // own Color
                            Text(quest.title)
                                .foregroundColor(.gray)

                        } else {
                            Image(systemName: "checkmark.circle")
                                .foregroundColor(Color(.gray))
                            Text(quest.title)
                                .foregroundColor(.black)

                        }
                    }
                }
            }
        }
    }

}

Для получения дополнительной информации о List с editable data см.: https://developer.apple.com/documentation/swiftui/list#listing-editable-data

Другие вопросы по теме