Я попробовал несколько репозиториев GitHub, чтобы добавить стили к моему Apple MapKit, и в каждом из их указаний говорится о расширении класса ViewController: MKMapViewDelegate, как показано ниже. Я понимаю, что структура не может быть расширена как класс UIKit.
extension ViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if let tileOverlay = overlay as? MKTileOverlay {
return MKTileOverlayRenderer(tileOverlay: tileOverlay)
}
return MKOverlayRenderer(overlay: overlay)
}
}
У меня нет проблем с реализацией этого в UIKit, но я пытаюсь понять, как SwiftUI будет интегрирован, если я не хочу обернуть что-нибудь классом UIKit.
Возможно ли обойти это расширение, поддерживая мой SwiftUI, не оборачивающий класс UIKit? Я хотел бы понять, как реализовать это для будущих проблем, так как многие GitHub-репозитории следуют аналогичным инструкциям, которые расширяют некоторые классы, но не подходят для использования с SwiftUI.
В дальнейших попытках у меня есть класс-координатор I попытался добавить функцию в мой класс координатора, который расширил MKMapViewDelegate.
class Coordinator: NSObject, MKMapViewDelegate {
let mapView = MKMapView()
init(mapView: MKMapView) {
super.init()
mapView.delegate = self
addCustomOverlay()
}
private func addCustomOverlay() {
guard let jsonURL = Bundle.main.url(forResource: "overlay", withExtension: "json") else { return }
do {
let gmTileOverlay = try GoogleMapsTileOverlay(jsonURL: jsonURL)
gmTileOverlay.canReplaceMapContent = true
mapView.addOverlay(gmTileOverlay)
} catch let error {
print(error.localizedDescription)
}
}
Неудивительно, что удалось изменить текущий стиль координатора местоположения, но не тайлы mapView.