Combining and listing multiple Core Data properties into an array - Specifically for SwiftUI map kit

问题描述 投票:0回答:0

我在使用 @Fetchrequest 属性包装器并将所有数据组合到一个数组中时遇到问题。特别需要,因为 Mapkit API 只需要一个数组用于注释 (annotationItems: )

我有以下数组:

 @FetchRequest(fetchRequest: OrgEntity.all()) private var orgs
 @FetchRequest(fetchRequest: PersonEntity.all()) private var people
 @FetchRequest(fetchRequest: TaskEntity.all()) private var tasks

我想为这三个数组中的每个对象显示注释,但我想不出实现它的方法。仅使用 org 属性作为示例效果很好,但我如何列出所有三个?

Map(coordinateRegion: $vm.region, showsUserLocation: true, annotationItems: orgs,  annotationContent: { org in
                MapAnnotation(coordinate: CLLocationCoordinate2D(latitude: org.lat, longitude: org.long)) {
                    MapAnnotationPin()
                        .scaleEffect()
                }
            })

这是我的完整代码

import SwiftUI
import MapKit
import CoreData

struct MapView: View {
    
    @Environment(\.dismiss) private var dismiss
    @EnvironmentObject private var vm: MapViewModel
    
    @FetchRequest(fetchRequest: OrgEntity.all()) private var orgs
    @FetchRequest(fetchRequest: PersonEntity.all()) private var people
    @FetchRequest(fetchRequest: TaskEntity.all()) private var tasks
    
    var body: some View {
        
        ZStack {
           // Map(coordinateRegion: $vm.region, showsUserLocation: true)
            Map(coordinateRegion: $vm.region, showsUserLocation: true, annotationItems: orgs,  annotationContent: { org in
                MapAnnotation(coordinate: CLLocationCoordinate2D(latitude: org.lat, longitude: org.long)) {
                    MapAnnotationPin()
                        .scaleEffect()
                }
            })
                .ignoresSafeArea()
                .onAppear {
                    vm.checkIfLocationServicesEnabled()
                }
            VStack(spacing: 0) {
                header
                .padding()
                Spacer()
                
                ZStack {
                    if vm.selectedEntity != nil {
                        MapCardView(entity: vm.selectedEntity!)
                            .shadow(color: Color.black.opacity(0.3), radius: 20)
                            .padding()
                            .transition(.asymmetric(
                                insertion: .move(edge: .trailing),
                                removal: .move(edge: .leading)))
                    }
                }
                
                backButton
            }
        }
        .navigationBarBackButtonHidden()
        .navigationBarTitleDisplayMode(.inline)
    }
}
ios swiftui core-data mapkit
© www.soinside.com 2019 - 2024. All rights reserved.