Код: Выделить всё
import SwiftUI
@main
struct State_BugApp: App {
var body: some Scene {
WindowGroup {
NavigationSplitView {
List {
Section {
Text("Home")
}
}.listStyle(.insetGrouped)
} detail: {
NavigationStack {
MainView()
}
}
}
}
}
struct MainView: View {
@Environment(\.dismiss) private var dismiss
@State var action: String = "Open child"
var body: some View {
List {
NavigationLink {
listDestination()
} label: {
Text(action)
}
}
}
@ViewBuilder func listDestination() -> some View {
ChildView(action: { value in foo() })
}
func foo() {
self.action = "Updated action"
}
}
struct ChildView: View {
@StateObject var viewModel: ChildViewModel = ChildViewModel()
var action: (String) -> Void
init(action: @escaping (String) -> Void) {
self.action = action
}
var body: some View {
List {
Text("Text")
}
}
}
class ChildViewModel: ObservableObject {
var title: String = "Child"
}
Проблема связана с тем, что значение отклонения не является равным и поэтому вызывает цикл, поскольку представление бесконечно перерисовывается при нажатии на ссылку NavigationLink. Это описано здесь https://hachyderm.io/@teissler/112533860374716961 и здесь https://forums.developer.apple.com/foru ... oblem%20if, для%20построения%20%20представленного%20представления. но я не могу понять, как можно решить проблему использования отклонения.
Подробнее здесь: https://stackoverflow.com/questions/787 ... ment-value
Мобильная версия