【问题标题】:Swift: Trying to get coordinates, but don't know how to call locationManager() functionSwift:试图获取坐标,但不知道如何调用 locationManager() 函数
【发布时间】:2016-07-07 20:56:40
【问题描述】:

我正在尝试获取用户的纬度和经度。

import Foundation
import CoreLocation

class locationModule: NSObject, CLLocationManagerDelegate {
var locationManager = CLLocationManager()

func getLocation() {
    locationManager.delegate = self
    locationManager.requestAlwaysAuthorization()
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.startUpdatingLocation()
}

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    var location: CLLocationCoordinate2D = (manager.location?.coordinate)!
    print(location.latitude)
    print(location.longitude)
    }
}

这是代码在一个单独的 Swift 文件中,所以我需要 getLocation() 才能调用 func locationManager,我将如何从 getLocation() 函数调用 locationManager 函数。

【问题讨论】:

  • 你为什么要打电话给locationManager?重点是它被CLLocationManager 为你调用
  • @AMomchilov 什么叫CLLocationManager
  • CLLocationManager 的全部意义在于它调用你的CLLocationManagerDelegatelocationManager 方法,以便通知你位置变化。自己调用该方法没有意义。

标签: swift location core-location cllocation


【解决方案1】:

您的代码很好,但没有被调用,可能是因为您没有将密钥添加到 Info.plist。

对于您的代码,将NSLocationAlwaysUsageDescription 添加到您的Info.plist 中,并将All your base are belong to us, so I use your location whenever I want. 等值作为字符串值。然后像这样在func applicationDidBecomeActive(application: UIApplication) 之类的地方启动你的locationManager:

类 AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?
var locMod:locationModule?

func applicationDidBecomeActive(application: UIApplication) {
    if ( locMod == nil )
    {
       locMod = locationModule()
    }
    locMod?.getLocation()
}

第一次,你会看到提示,然后你会看到正在记录的位置。

仅供参考,这是我组织 locationModule 的方式:

class locationModule: NSObject, CLLocationManagerDelegate {
    var locationManager = CLLocationManager()

    internal func getLocation() {
        locationManager.delegate = self
        locationManager.requestAlwaysAuthorization()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
    }


    // MARK : CLLocationManagerDelegate protocol
    @objc
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        for location in locations {
            print("\(location.coordinate.latitude), \(location.coordinate.longitude)")
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2021-03-31
    • 1970-01-01
    相关资源
    最近更新 更多