首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIViewRepresentable与SwiftUI之间的数据传递

UIViewRepresentable与SwiftUI之间的数据传递
EN

Stack Overflow用户
提问于 2021-12-21 18:06:02
回答 1查看 652关注 0票数 0

我在我的应用程序中使用谷歌地图。该应用程序在地图上显示POI标记,并在地图视图按一定距离拖动时从my BE加载数据。我希望将shoudlRefresh值传回给ContentView,并要求用户再次刷新数据。

我使用@Binding在我的ContentView和UIViewRepresentable之间传递数据,但是我不能通过协调员在映射中使用这个@Binding var shouldRefresh

如果我试图通过协调器init()将这个@Binding传递给协调器,我将得到以下两个错误

代码语言:javascript
运行
复制
at POINT A -> Property 'self.mShouldRefresh' not initialized at implicitly generated super.init call  

at POINT B -> self' used in property access 'mShouldRefresh' before 'super.init' call

只有相关守则:

代码语言:javascript
运行
复制
struct MapsView: UIViewRepresentable {

       @Binding var shouldRefresh: Bool

func makeUIView(context: Context) -> GMSMapView
func updateUIView(_ mapView: GMSMapView, context: Context)  

{
    func makeCoordinator() -> Coordinator {
   Coordinator(owner: self, refresh: $shouldRefresh)
}

class Coordinator: NSObject, GMSMapViewDelegate {
    
    let owner: MapsView
    @Binding var mShouldRefresh: Binding<Bool>
    
    var startPoint : CLLocationCoordinate2D?
    var startRadius : Double?
    
    init(owner: MapsView, refresh: Binding<Bool>) { //  POINT A
        self.owner = owner
        self.mShouldRefresh = refresh // POINT B
    }
    
    func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) { }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-21 18:12:29

您已经给出了mShouldRefresh的双重绑定

只要换到

代码语言:javascript
运行
复制
@Binding var mShouldRefresh: Bool

在init里面改变这个

代码语言:javascript
运行
复制
self._mShouldRefresh = refresh

另一种方式是

代码语言:javascript
运行
复制
// Other Code
var owner: MapsView
var mShouldRefresh: Binding<Bool>

init(owner: MapsView, refresh: Binding<Bool>) {
    self.owner = owner
    self.mShouldRefresh = refresh
}
// Other Code
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70439831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档