Картограф из привязки SwiftUI

#swiftui #mapkit #core-location

Вопрос:

Я пытаюсь показать маркер карты на карте с использованием долготы и широты selectedBus var, но я просто не могу ее решить.

С приведенным ниже кодом я получаю ошибку Статический метод «buildBlock» требует, чтобы «MapMarker» соответствовал «Представлению»

 import SwiftUI
import MapKit
import CoreLocation

struct BusView: View {
    @Binding var selectedBus : Bus
    @State private var coordinateRegion = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 40, longitude: 28), span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))

       var body: some View {
           Map(coordinateRegion: $coordinateRegion)
           MapMarker(coordinate: CLLocationCoordinate2D(latitude: selectedBus.location?.latitude ?? 0, longitude: selectedBus.location?.longitude ?? 0), tint: .red)
           
       }
}



    struct Bus: Decodable, Hashable {
    let remainingTime: Int?
    let plate: String?
    let routeCode: String?
    let icon: String?
    let location: Location?
}

struct Location: Decodable, Hashable {
    
    let latitude: Double?
    let longitude: Double?
}
 

Комментарии:

1. У вас есть ошибка в какой строке? Где у вас есть «Строительный блок»?

Ответ №1:

Вам нужно иметь массив аннотаций(я только что назвал это annotations ), чтобы использовать a MapMarker , так как это только View то, что показывает, где находится аннотация. Ваш var body должен выглядеть так:

    var body: some View {
    Map(coordinateRegion: $coordinateRegion, annotationItems: annotations) {
       MapMarker(coordinate: CLLocationCoordinate2D(latitude: selectedBus.location?.latitude ?? 0, longitude: selectedBus.location?.longitude ?? 0), tint: .red)
       }
   }