#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
. Если в aView
, переменная должна быть отмечена знаком@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
}
}