Предварительный выбор (динамического) элемента в NavigationSplitView
я используюNavigationSplitView
чтобы структурировать пользовательский интерфейс моего (macOS) приложения следующим образом:
struct NavigationView: View {
@State private var selectedApplication: Application?
var body: some View {
NavigationSplitView {
ApplicationsView(selectedApplication: $selectedApplication)
} detail: {
Text(selectedApplication?.name ?? "Nothing selected")
}
}
}
Боковая панель реализована с использованиемApplicationsView
это выглядит так:
struct ApplicationsView: View {
@FetchRequest(fetchRequest: Application.all()) private var applications
@Binding var selectedApplication: Application?
var body: some View {
List(applications, selection: $selectedApplication) { application in
NavigationLink(value: application) {
Text(application.name)
}
}
// This works, but looks a bit complicated and... ugly
.onReceive(applications.publisher) { _ in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
if selectedApplication == nil {
selectedApplication = applications.first
}
}
}
// This also does not work, as the data is not yet available
.onAppear {
selectedApplication = applications.first
}
}
}
Я сейчас выбираю первыйApplication
элемент (если он существует) с помощью показанногоonReceive
код, но он выглядит сложным и немного некрасивым. Например, он работает правильно только при задержке кода выбора.
Есть ли лучший способ добиться этого?
Спасибо.