ForEach NavigationLink с состоянием и привязкой
Я пытаюсь создать ForEach с помощью NavigationLink и использовать State и Binding для передачи некоторого объекта:
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(
entity: MyEntity.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \MyEntity.name, ascending: true)
]
) var entries: FetchedResults<MyEntity>
var body: some View {
NavigationView {
List {
ForEach(entries, id: \.self) { (entry: MyEntity) in
NavigationLink(destination: DetailView(myEntry: $entry)) {
Text(entry.name!)
}
}.
}
}
}
}
А потом такой вид:
struct DetailView: View {
@Binding var myEntry: MyEntity
var body: some View {
Text(myEntry.name!)
}
}
Проблема в том, что я не могу передать значение в подробное представление из-за ошибки:
Use of unresolved identifier '$entry'
Что здесь не так и как это решить?
Если бы у меня был простой @State
нет проблем передать его через привязку, но я хочу / должен использовать его в ForEach для FetchedResults
РЕДАКТИРОВАТЬ: если я удалю $
я получил Cannot convert value of type 'MyEntity' to expected argument type 'Binding<MyEntity>'
EDIT2: цель состоит в том, чтобы передать некоторый объект в DetailView, а затем передать его позже в ContentView
2 ответа
Используйте следующее в ForEach
ForEach(entries, id: \.self) { entry in
NavigationLink(destination: DetailView(myEntry: entry)) {
Text(entry.name!)
}
}
и следующие в DetailView
struct DetailView: View {
var myEntry: MyEntity
var body: some View {
Text(myEntry.name!)
}
}
В MyEntity
это класс, поэтому вы передаете объект по ссылке и меняете его в DetailView
вы меняете тот же объект.
FetchedResults<MyEntity> entities
не соответствует Binding
или DynamicProperty
. Для$
символ тренировки должен соответствовать Binding
.
Вы можете сделать FetchedResultsController
в ObservableObject
чтобы получить ту же функциональность, что и @FetchRequest
и иметь возможность передавать значения в EnvironmentObject
или ObservedObject
.