Я снова вернулся, лол. Мое представление содержимого выглядит так:
struct ContentView: View {
@ObservedObject var VModel = ViewModel()
@State private var resultsNeedToBeUpdated: Bool = false
var body: some View {
VStack {
if self.resultsNeedToBeUpdated == true {
SearchResults(VModel: VModel, resultsNeedToBeUpdated: $resultsNeedToBeUpdated)
}
}
}
}
Вид SearchBar выглядит так:
struct SearchResults: View {
var VModel: ViewModel
@Binding var resultsNeedToBeUpdated: Bool
var body: some View {
List {
ForEach(VModel.searchResults, id: \.self) { result in
Text(result)
}
}
}
}
Наконец, класс ViewModel выглядит так:
class ViewModel: ObservableObject {
@Published var searchResults: [String] = []
func findResults(address: String) {
let Geocoder = Geocoder(accessToken: 'my access token')
searchResults = []
Geocoder.geocode(ForwardGeocodeOptions(query: address)) { (placemarks, attribution, error) in
guard let placemarks = placemarks
else {
return
}
for placemark in placemarks {
self.searchResults.append(placemark.formattedName)
print("Formatted name is: \(placemark.formattedName)") //this works
}
}
//I'm doing my printing on this line and it's just printing an empty array ;(
}
Переменная ' resultsNeedToBeUpdated '- это логическая привязка, которая обновляется, когда пользователь вводит текст в представление панели поиска, и по сути просто сообщает вам, что представление SearchResults должно отображаться, если оно истинно, и не должно отображаться, если оно ложно. Я пытаюсь обновить представление SearchResults в зависимости от того, что ввел пользователь.
Ошибка определенно связана с отображением представления SearchResults (я думаю, что он отображает только начальное представление, прежде чем массив обновлен). Я попытался использовать привязку, потому что думал, что это вызовет перезагрузку ContentView и обновит SearchResultsView, но это не сработало.