如何跟踪设置locationManager.delegate的正确方法?

Jon*_*000 0 location core-location ios swift

我尝试使用CoreLocation和Swift来跟踪用户的位置:(
下面你可以找到可能的ViewController.swift文件的代码.)

但是代码似乎没有像我预期的那样工作,因为我每次启动应用程序时仍然会得到相同的错误:

无法指定

我确定这就是为什么我无法从locationManager()打印出当前位置的函数中得到结果的问题.

它说 "Cannot assign value of type 'ViewController' to type 'CLLocationManagerDelegate?'"

import UIKit
import CoreLocation 

class ViewController: UIViewController, WKUIDelegate {
  override func viewDidLoad() {
    super.viewDidLoad()
    if CLLocationManager.locationServicesEnabled() {
        print("CLLocationManager is available")
        locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
        locationManager.delegate = self
        locationManager.startUpdatingLocation()
    }
  }

  let locationManager = CLLocationManager()

  func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let location = locations.first {
        print(location.coordinate)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在有人如何解决这个问题? - 非常感谢任何帮助,感谢提前一百万.

Dáv*_*tor 5

你只需要声明一致性CLLocationManagerDelegate.您可以直接在类声明中执行此操作,就像使用WKUIDelegate或在扩展名中一样ViewController.

class ViewController: UIViewController, WKUIDelegate, CLLocationManagerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        if CLLocationManager.locationServicesEnabled() {
            print("CLLocationManager is available")
            locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
            locationManager.delegate = self
            locationManager.startUpdatingLocation()
        }
    }

    let locationManager = CLLocationManager()

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.first {
            print(location.coordinate)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

随着扩展:

class ViewController: UIViewController, WKUIDelegate {
    let locationManager = CLLocationManager()
    override func viewDidLoad() {
        super.viewDidLoad()
        if CLLocationManager.locationServicesEnabled() {
            print("CLLocationManager is available")
            locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
            locationManager.delegate = self
            locationManager.startUpdatingLocation()
        }
    }
}

extension ViewController: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if let location = locations.first {
            print(location.coordinate)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)