Использование расширения для хранения местоположения пользователя в полезной переменной

#swiftui #mapkit #mapkitannotation

#swiftui #mapkit #mapkitannotation

Вопрос:

У меня есть расширение, которое я создал, используя LocationManager для хранения местоположения пользователей в переменной, которая будет использоваться в Swiftui Map() и моем расширении. Я заметил, что когда я инициализирую переменную, для расширения требуются как lat, так и long, которые будут использоваться там, где мне просто нужен userLat.

latitude: userLocation.init(userLat: <#Double#>, userLong: <#Double#>).self.userLat,

    struct ContentView_v2: View {
    
    //    MARK: Get current location
        class userLocation {
            let locationManager = LocationManager()
    
            var userLat: Double
            var userLong: Double
    
            init(userLat: Double, userLong: Double){
                self.userLat = locationManager.lastLocation?.coordinate.latitude ?? 0.0
                self.userLong = locationManager.lastLocation?.coordinate.longitude ?? 0.0
            }
    
        }
    
        @State private var region = MKCoordinateRegion(
            center: CLLocationCoordinate2D(
                latitude: userLocation.init(userLat: <#Double#>, userLong: <#Double#>).self.userLat,
                longitude: userLocation.init(userLat: <#Double#>, userLong: <#Double#>).self.userLong
            ),
            span: MKCoordinateSpan(
                latitudeDelta: 0.01,
                longitudeDelta: 0.01
                )
        )
var body: some View {
        Map(
            coordinateRegion: $region,
            interactionModes: MapInteractionModes.all,
            showsUserLocation: true,
            userTrackingMode: $userTrackingMode,
            annotationItems: yelpbusinessmapdata?.businesses ?? []
        )
        { business in
            MapAnnotation(
                coordinate:
                    business.coordinates.coordinate2D,
                anchorPoint: CGPoint(x: 0.5, y: 0.5)
            ){
                VStack {
                    Image(systemName: "mappin")
                        .font(.system(size: 18, weight: .medium))
                        .foregroundColor(.red)
                    Text(business.name)
                }
                

            }
        }
  

Ответ №1:

Если я правильно понял ваш код, то, вероятно, вы хотели следующее…

     class userLocation {
        let locationManager = LocationManager()

        var userLat: Double
        var userLong: Double

        init(){
            self.userLat = locationManager.lastLocation?.coordinate.latitude ?? 0.0
            self.userLong = locationManager.lastLocation?.coordinate.longitude ?? 0.0
        }

    }

    @State private var region = MKCoordinateRegion(
        center: CLLocationCoordinate2D(
            latitude: userLocation().userLat,
            longitude: userLocation().userLong
        ),