在swift中使用CLLocationManager的位置类

Cra*_*igH 2 cllocationmanager cllocation ios swift

我是iOS新手.我有一个应用程序,允许用户在不同的视图控制器中更新其位置.我试图最小化执行此操作的代码量,因此我将所有与位置相关的方法放在一个单独的类中,而不是复制方法来实现这一点.

import UIKit
import CoreLocation

class LocationUtil: NSObject, CLLocationManagerDelegate {
   let locationManager = CLLocationManager()

   func findUserLocation()->Void{
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
    }
Run Code Online (Sandbox Code Playgroud)

从我的视图控制器我这样称呼这个类.

 override func viewDidLoad() {
        super.viewDidLoad()
        let locUtil = LocationUtil()
        locUtil.findUserLocation()

}
Run Code Online (Sandbox Code Playgroud)

但是,没有任何委托方法被调用.当我在视图控制器中直接使用相同的代码时,它工作正常.我究竟做错了什么?

mat*_*att 6

问题是,locUtil您为其分配了LocationUtil实例,它是一个自动变量 - 也就是说,它是viewDidLoad函数的本地变量.因此,当viewDidLoad运行时,locUtil(和你的LocationUtil实例)成立,存在一条线,并在一阵烟雾中消失.因此,您的LocationUtil实例将再次被销毁 - 将其实例变量(例如位置管理器)与其一起使用.

因此,没有时间发生任何事情.位置管理员及其代表的存在时间约为百万分之一秒.这不足以找出你的位置!