在SwiftUI中实现类扩展而不包装UIKit类
我已经尝试了许多GitHub repo向我的Apple MapKit添加样式,他们的每一个方向都是扩展一个ViewController类:MKMapViewDelegate,如下面的代码所示。我理解结构不能像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
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不是敌人,它们生活在一起。我正在尝试为委托使用扩展,因为您无法扩展结构。我只是尝试以不同的方式在结构上使用这个类扩展。