Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 正在尝试在func makeCoordinator()中访问环境对象_Swift_Swiftui_Mapkit - Fatal编程技术网

Swift 正在尝试在func makeCoordinator()中访问环境对象

Swift 正在尝试在func makeCoordinator()中访问环境对象,swift,swiftui,mapkit,Swift,Swiftui,Mapkit,我试图连续计算一个距离(从:用户位置),在ContentView中输入固定的lat/long。 我可以在struct MapView:UIViewRepresentable{中的func中做一次,但我想做一个连续的计算。我想我可以在内部做这件事 func映射视图(\mapView:MKMapView,didUpdate userLocation:MKUserLocation)inside 类MapViewCoordinator:NSObject,MKMapViewDelegate 我在一个文件中

我试图连续计算一个距离(从:用户位置),在ContentView中输入固定的lat/long。 我可以在
struct MapView:UIViewRepresentable{
中的func中做一次,但我想做一个连续的计算。我想我可以在内部做这件事
func映射视图(\mapView:MKMapView,didUpdate userLocation:MKUserLocation)
inside
类MapViewCoordinator:NSObject,MKMapViewDelegate

我在一个文件中定义了EnvironmentObject

import SwiftUI

final class AppData: ObservableObject { // Don't know why final
    @Published var cornerLatitude: String = ""
    @Published var cornerLongitude: String = ""
    @Published var corner: Int = 1
}
在MapView文件的顶部,我包含了EnvironmentObject

import MapKit

struct MapView: UIViewRepresentable {
    @EnvironmentObject var appData: AppData
    var map = MKMapView()
    var locationManager: CLLocationManager!
    
    init() {
        locationManager = CLLocationManager()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.requestWhenInUseAuthorization()
    }
在类MapViewCoordinator func mapView中,如果我取消注释
let cornerLat=
let cornerLon=
行,我将得到错误

不能在嵌套类型为“MapView.MapViewCoordinator”的实例上使用类型为“MapView”的实例成员“appData”

我尝试过其他类似结果的“组合”代码

        let map: MKMapView
        
        init(map:MKMapView) {
            self.map = map
        }

        func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
            let location = map.userLocation
            let region = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: 500, longitudinalMeters: 500)
            map.setRegion(region, animated: true)

//            let cornerLat = Double(appData.cornerLatitude) ?? 0.0
//            let cornerLon = Double(appData.cornerLongitude) ?? 0.0

        }
    }

任何想法/建议。谢谢

如果我正确理解提供的代码,那么您可以执行以下操作(因为AppData是引用类型)

发痒(未经测试,只是想法)

类MapViewCoordinator{
let map:MKMapView
让appData:appData//在这里!!
初始化(映射:MKMapView,appData:appData){
self.map=map
self.appData=appData//MapViewCoordinator{

MapViewCoordinator(map:map,appData:appData)//如果我正确理解提供的代码,那么您可以执行以下操作(因为appData是引用类型)

发痒(未经测试,只是想法)

类MapViewCoordinator{
let map:MKMapView
让appData:appData//在这里!!
初始化(映射:MKMapView,appData:appData){
self.map=map
self.appData=appData//MapViewCoordinator{

MapViewCoordinator(地图:地图,appData:appData)//非常好。谢谢。我想我希望@EnvironmentObject完成所有工作。但是,我已经将appData作为“参数”从ContentView传递给MapView中的func。非常好。谢谢。我想我希望@EnvironmentObject完成所有工作。但是,我已经将appData作为“参数”从Cont传递给func在MapView中将entView转换为func。
class MapViewCoordinator {

    let map: MKMapView
    let appData: AppData    // here !!
    
    init(map:MKMapView, appData: AppData) {
        self.map = map
        self.appData = appData        // << here !!
    }

    // ... use where needed as own property
struct MapView: UIViewRepresentable {
    @EnvironmentObject var appData: AppData
    var map = MKMapView()

    ...

    func makeCoordinator() -> MapViewCoordinator {
        MapViewCoordinator(map: map, appData: appData)   // << inject !!
    }