Обратите внимание, что для этого метода требуется Binding<Item?>
, а Item
должно быть Identifiable
. Для параметра Binding<Item?>
вы должны передать «источник правды», который управляет тем, как выглядит отображаемое предупреждение, или показывает ли предупреждение вообще. Когда этот источник правды изменяется (то есть становится чем-то другим), представление обновит предупреждение.
Но вот проблема, как SwiftUI узнает, что означает «изменение» в контексте вашей модели? Допустим, Item
- это класс Person
, который вы написали. Person
имеет name
и age
. Ваша работа - сказать SwiftUI, что «Person
становится совершенно другим человеком, когда его имя меняется». (Конечно, у вас могло бы быть какое-то другое определение того, что здесь подразумевается под «изменением человека». Это определение является лишь примером.)
struct Person : Identifiable {
var id: String {
name
}
let name: String
let age: Int
}
Именно поэтому Item
должно быть Identifiable
, Item.id
является, таким образом, «идентичностью».
Обратите внимание, что Identifiable
отличается от Equatable
тем, что Identifiable
задает вопрос "что делает этого человека другим человеком?" тогда как Equatable
спрашивает «какой результат вы бы хотели ==
дать?». См. this для другого примера.
как мы можем изменить «идентичность» чего-либо?
Просто измените привязку, которую вы передаете (например, установить @State
, на котором основана привязка) таким образом, что его id
изменится.