I have this simple piece of code that of course correctly ran in Swift 5:
func geoRegion()-> CLRegion?{
guard let location=referenceLocation else{
return nil
}
return CLCircularRegion(center:location.coordinate, radius:50000, identifier:"georeferencing")
}
func placemarksForAddress(_ address: String) async throws -> [CLPlacemark]?{
if let placemark=placemarkCache[address]{
if placemark.location!.distance(from: referenceLocation!)<100000{
return [placemark]
}
}
do{
guard let geoRegion=self.geoRegion() else {
return nil
}
let placemarks = try await georeferenceQueue.geocodeAddressString( address, in: geoRegion)
if placemarks.count>=0{
self.placemarkCache[address]=MKPlacemark(placemark: placemarks[0])
return placemarks
}
} catch {
let placemarks=try await self.placemarkForLocation(referenceLocation)
return placemarks
}
return nil
}
That now presents error:
Sending task-isolated 'geoRegion' to actor-isolated instance method 'geocodeAddressString(_:in:)' risks causing data races between actor-isolated and task-isolated uses