我在使用 @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)
}
}