SwiftUI получает, какая аннотация объекта была нажата на карте. Основные данные

я пытался сделать так, чтобы при нажатии аннотации на карте, созданной объектом Core Data, отображалось LocationPreviewView(fish: fish). Итак, как я могу получить выбранный элемент и передать его в LocationPreviewView()?

я уже пытался это сделать через UIViewRepresentableкстати и уже писал об этом, но безуспешно.

      import SwiftUI
import MapKit
import CoreData
import CoreLocationUI
import StoreKit


struct MapMainView: View {
//???
    @State private var selectedFish: Fish?
    
    @Environment(\.managedObjectContext) private var moc
    @ObservedObject var locationManager = LocationManager.shared
    
    @State private var region = MKCoordinateRegion(center: LocationManager.currentLocation, span: MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1))
    
    
    var body: some View {
        
        ZStack {
            Map(coordinateRegion: $region,
                interactionModes: .all,
                showsUserLocation: true,
                annotationItems: annotations) {
                MapMarker(coordinate: $0.coordinate)
            }
                .ignoresSafeArea()
            VStack(spacing: 0) {
                
                
                ZStack {
                    ForEach(fetchFish()) { fish in
// Here pass the selected fish?????????
                        LocationPreviewView(fish: fish)
                            .shadow(color: Color.black.opacity(0.3), radius: 20)
                            .padding()
                            .transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)))
                    }
                }
            }
            
        }
    }
    var annotations: [FishAnnotation] {
        let fish = fetchFish()
        return fish.map { FishAnnotation(name: $0.title ?? "No data found", coordinate: CLLocationCoordinate2D(latitude: $0.lat, longitude: $0.long)) }
    }
    
    func fetchFish() -> [Fish] {
        let request: NSFetchRequest<Fish> = Fish.fetchRequest()
        do {
            return try moc.fetch(request)
        } catch {
            print("Error fetching fish entities: \(error)")
            return []
        }
    }
}

struct MapMainView_Previews: PreviewProvider {
    
    @State static var mapView: MKMapView = MKMapView()
    
    static var previews: some View {
        MapMainView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
    }
}




0 ответов

Другие вопросы по тегам