#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)
}
}