This is the function I am calling, which uses the latitude and longitude, converts them into city name and country name, and then returns city name or country name depending on what I want.
import SwiftUI
import CoreLocation
struct junoWeatherEntryView: View {
@ObservedObject var cityVM = allCities()
@State private var searchTerm = "San Francisco"
var body: some View {
VStack{
search
Spacer()
ForEach(cityVM.weather){ item in
Text("\( try await reverseGeocode(lat: item.lat ,lan:item.lan).locality ?? "Unkown")")
}
}
}
func reverseGeocode(lat: Double, lan: Double) async throws -> CLPlacemark {
let geoCoder = CLGeocoder()
let location = CLLocation(latitude: lat, longitude: lan) // <- New York
return try await withCheckedThrowingContinuation { continuation in
geoCoder.reverseGeocodeLocation(location) { (placemarks, error) in
guard
error == nil,
let placemark = placemarks?.first
else {
continuation.resume(throwing: error ?? CLError(.geocodeFoundNoResult))
return
}
continuation.resume(returning: placemark)
}
}
}
}
here cityVM is @Published var weather = [WeatherResponse]()
Error i am getting is
1.Cannot pass function of type '(WeatherResponse) async throws -> Text' to parameter expecting synchronous function type
2.Invalid conversion from throwing function of type '(WeatherResponse) async throws -> Text' to non-throwing function type '(Array<WeatherResponse>.Element) -> Text'
I want to show the return value in the TextView how can I achieve this ?