在SwiftUI中实现类扩展而不包装UIKit类

在SwiftUI中实现类扩展而不包装UIKit类,swift,swiftui,mapkit,Swift,Swiftui,Mapkit,我已经尝试了许多GitHub repo向我的Apple MapKit添加样式,他们的每一个方向都是扩展一个ViewController类:MKMapViewDelegate,如下面的代码所示。我理解结构不能像UIKit类那样扩展 extension ViewController: MKMapViewDelegate { func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRe

我已经尝试了许多GitHub repo向我的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中实现这一点没有问题,但我正试图进一步了解如果我不想用UIKit类包装任何东西,SwiftUI将如何集成

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

}
在维护我的SwiftUI不包装UIKit类的同时,是否可以绕过此扩展?我想了解如何在将来的问题上实现这一点,因为许多GitHub repo遵循类似的指令,这些指令扩展了一些类,但不适合与SwiftUI一起使用

在我的进一步尝试中,我有一个协调器类,我尝试将该函数添加到扩展了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平铺

是否可以在维护我的扩展的同时解决此扩展 SwiftUI不包装UIKit类

您不能在包装UIKit类的情况下执行此操作,因为
MKMapView
本身是一个
UIView
,因此要在SwiftUI中使用它,您必须将其包装在
UIViewRepresentable
中,这是Apple为此类情况明确提供的


事实上,对我来说,这种自我限制的原因还不清楚。。。SwiftUI和UIKit不是敌人,它们生活在一起。

我正在尝试为委托使用扩展,因为您无法扩展结构。我只是尝试以不同的方式在结构上使用这个类扩展。