我有一个应用程序在其各个视图控制器中都使用用户的位置,并且我了解到,要获取该位置,您需要创建一个CLLocationManger实例并遵守CLLocationManagerDelegate协议。

是否可以创建一个CLLocationManager实例并在不同的视图控制器中使用其属性(例如坐标),还是应该在每个视图控制器类中创建一个CLLocationManager?

最佳答案

一个快速且可靠的黑客攻击可能是:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startUpdatingLocation()
        return true
     }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        lastLocation = locations.last!
    }

在全局范围内的同一源文件中,添加:
private var lastLocation: CLLocation? {
    didSet {
        locationCallback?(lastLocation!)
        locationCallback = nil
    }
}

private var locationCallback: ((CLLocation) -> Void)?

func getLastLocation(callback: (CLLocationManager) -> Void) {
    guard let location = lastLocation else {
        locationCallback = callback
        return
     }
     locationCallback(location)
}

最后,在您应用的其他位置,您可以使用以下方法获取您的最后一个已知位置:
getLastLocation { location in
    print(location)
}

关于ios - 如果我的应用程序在各种 View Controller 中都使用位置管理器,我应该在哪里实例化它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43439747/

10-09 17:57
查看更多