SwiftUI@State的UIKit更新导致;“在视图更新期间修改状态”;

SwiftUI@State的UIKit更新导致;“在视图更新期间修改状态”;,swift,uikit,swiftui,Swift,Uikit,Swiftui,我有一个SwiftUI组件,它加载的MapKit如下: struct AddressView: View { @State private var showingPlaceDetails = false var body: some View { MapView(showPlaceDetails: self.$showPlaceDetails) } } MapView组件是使用UIKit->SwiftUI包装技术的MapKit结构: struct M

我有一个SwiftUI组件,它加载的MapKit如下:

struct AddressView: View {

    @State private var showingPlaceDetails = false

    var body: some View {
        MapView(showPlaceDetails: self.$showPlaceDetails)
    }
}
MapView组件是使用UIKit->SwiftUI包装技术的MapKit结构:

struct MapView: UIViewRepresentable {

    @Binding var showingPlaceDetails: Bool

    func makeUIView(context: Context) -> MKMapView {

        let map = MKMapView()

        map.delegate = context.coordinator

        return map
    }

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    final class Coordinator: NSObject, MKMapViewDelegate {

        var control: MapView

        init(_ control: MapView) {
            self.control = control
        }

        func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

              // This is where the warning happen
              self.control.showingPlaceDetails = true
        }
    }
}
因此,在视图更新过程中修改showPlaceDetails会触发以下警告:
[SwiftUI]修改状态,这将导致未定义的行为。

我应该如何清理此代码?这个实现正确吗

我知道我正在通过@Binding一个父@State属性进行更改,该属性将使用MapView重新呈现AddressView

我理解为什么它不好,比如在React中更改渲染内部的状态属性,并且这种突变应该发生在身体外部,但是如何才能做到这一点,因为我需要身体内部的MapView

XCode版本11.3.1(11C504)


macOS版本10.15.4 Beta版(19E224g)

这方面的常见修复正在等待修改,如下所示

    func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
          DispatchQueue.main.async {
             self.control.showingPlaceDetails = true
          }
    }

差点从我的桌子上掉下来:)这太漂亮了谢谢你@Asperit太棒了!