(Не удается присвоить свойству: ‘_products’ является константой ‘let’)

#swift #swiftui

Вопрос:

Класс Модели

 struct Products: Identifiable {
        var id = UUID()
        var title:String
        var price:String
        var image:String
    }
 

Я пытаюсь изменить новое значение цены моего продукта, нажав на кнопку, показывающую его (Не удается присвоить свойству: «_products» является константой «let»).

(Не удается присвоить свойству: ‘_products’ является константой ‘let’)

Я пытаюсь изменить новое значение цены моего продукта, нажав на кнопку, показывающую его (Не удается присвоить свойству: «_products» является константой «let»).

Комментарии:

1. Используйте var , а не let . Если в a View , переменная должна быть отмечена знаком @State . Без кода или примера мы больше ничем не можем помочь.

2. Вы не добавили соответствующий код. В ошибке упоминается _products

3. Кнопка @George(действие: { _products.price = «20» self.HomeViewModel.objectWillChange.отправить() печать(_products.price) },

Ответ №1:

Вы можете использовать новый синтаксис , в котором вы можете использовать a Binding в a ForEach , указывая каждый элемент как a Binding . Ссылка здесь на полезную статью об этом.

Это означает такой код, как этот (где item константа):

 ForEach(items) { item in
    /* ... */
    /* item */
}
 

Теперь может быть преобразовано в это (где $item a Binding , и item теперь может быть установлено):

 ForEach($items) { $item in
    /* ... */
    /* item and $item */
}
 

В принципе, теперь измените свой ForEach на этот:

 ForEach ($Topproducts) { $product in
 

И для каждого использования , которое было ранее _products , замените его на product . Теперь вы можете изменить значение.

Ответ №2:

 class Products: ObservableObject, Identifiable, Codable {
    var id = UUID()
     var title:String
     var price:String
     var image:String
    
    init(title: String, price: String, image: String){
        self.title = title
        self.price = price
        self.image = image
        
    }
    
}