I'm pretty new in programming and this is my first app, so sorry if the approach is very shabby.
I created a helper method to get the user location, because I need to call it from different view controllers so I thought this was a cleaner way to do it. But I don't know why is not working now (no errors, it just show the general view of Europe). But when it was inside the view controller it worked perfectly fine.
I got this new approach from the course I'm doing and I've been researching in many sources. I've also checked this question but I didn't find any solution yet.
Here is the method I created in the GMSClient file. It will get the user location, but if the user disables this option, it will show the default position (centred in Berlin):
    extension GMSClient: CLLocationManagerDelegate {
    //MARK: Initial Location: Berlin
    func setDefaultInitialLocation(_ map: GMSMapView) {
        let camera = GMSCameraPosition.camera(withLatitude: 52.520736, longitude: 13.409423, zoom: 8)
        map.camera = camera
        let initialLocation = CLLocationCoordinate2DMake(52.520736, 13.409423)
        let marker = GMSMarker(position: initialLocation)
        marker.title = "Berlin"
        marker.map = map
    }
    //MARK: Get user location
    func getUserLocation(_ map: GMSMapView,_ locationManager: CLLocationManager) {
        var userLocation: String?
        locationManager.requestWhenInUseAuthorization()
        func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
            if status == .authorizedWhenInUse {
                locationManager.startUpdatingLocation()
                map.isMyLocationEnabled = true
                map.settings.myLocationButton = true
            } else {
                setDefaultInitialLocation(map)
            }
        }
        func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            if let location = locations.first {
                map.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
                locationManager.stopUpdatingLocation()
                //Store User Location
                userLocation = "\(location.coordinate.latitude), \(location.coordinate.longitude)"
                print("userLocation is: \((userLocation) ?? "No user Location")")
            }
        }
    }
}
This file has also this singelton:
// MARK: Shared Instance
    class func sharedInstance() -> GMSClient {
        struct Singleton {
            static var sharedInstance = GMSClient()
        }
        return Singleton.sharedInstance
    }
And then I call it in my view controller like this:
class MapViewController: UIViewController, CLLocationManagerDelegate {
    // MARK: Outlets
    @IBOutlet weak var mapView: GMSMapView!
    // MARK: Properties
    let locationManager = CLLocationManager()
    var userLocation: String?
    let locationManagerDelegate = GMSClient()
    // MARK: Life Cycle
    override func viewDidLoad() {
        super.viewDidLoad()
        self.locationManager.delegate = locationManagerDelegate
        GMSClient.sharedInstance().getUserLocation(mapView, locationManager)
    }
Anyone has an idea of what can be wrong?
Thanks!
 
    