Это просто случайная ошибка. XCode часто показывает странные сообщения об ошибках при использовании SwiftUI, которые не имеют никакого отношения к реальной проблеме.
Ваша настоящая проблема заключается в том, что вам нужно иметь вызовы .navigationBarHidden
и .navigationBarTitle
на самом верхнем уровне. уровень вашей иерархии просмотра (то есть VStack
). Поэтому вам нужно изменить эту часть следующим образом:
VStack {
[...]
if showCancelButton {
Button("Cancel") {
UIApplication.shared.endEditing(true) // this must be placed before the other commands here
self.searchText = ""
self.showCancelButton = false
}
.foregroundColor(Color(.systemBlue))
}
}
.padding(.horizontal)
//.navigationBarHidden(showCancelButton)
List {
ForEach(newsList, id: \.self) { news in
NavigationLink(
destination: DetailView(selectedNews: news)
) {
Text(news.title)
}
}.onDelete { indices in
indices.forEach { self.newsList.remove(at: $0) }
}
}
}
}
.navigationBarHidden(showCancelButton)
.navigationBarTitle(Text(selectedNews.title))
[...]
На данный момент единственная ошибка, которая у вас есть, заключается в том, что selectedNews
не объявлен внутри структуры MasterView. Поэтому вам просто нужно переместить его туда:
struct MasterView: View {
@State private var searchText = ""
@State private var showCancelButton: Bool = false
var selectedNews: News //<-- move here!
@Binding var newsList: [News]
var body: some View {
VStack {
// Search view
HStack {
HStack {
[...]
Тогда, если вы исправите все ошибки, которые вы получите, изменив init
-ов MasterView и DetailView, ваш код скомпилируется.