Swift-当前位置的自己的结构/类(CLLocationManager)



我想创建一个自己的结构或类来获取用户的当前位置。

我似乎无法在结构中使用CLLocationManager及其函数(didUpdateLocations、didFailWithError等)(Xcode使所有文本变为黑色,我收到一个错误,说An internal error occurred. Source editor is limited.)。当我使用一个类并尝试使用"getPlacemark"-函数(从实例化的类中获取占位符)或直接从创建的实例中获取("instancedClass.placemarkInClass"),但什么都不起作用时,我只得到Thread 1: EXC_BAD_ACCESS

这是我创建类的最后一次尝试:

import Foundation
import MapKit
class UserLocation: NSObject, CLLocationManagerDelegate{
    var mLocationManager: CLLocationManager
    var placemark: CLPlacemark
    override init(){
        placemark = CLPlacemark()
        self.mLocationManager = CLLocationManager()
        self.mLocationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.mLocationManager.requestWhenInUseAuthorization()
        self.mLocationManager.startUpdatingLocation()
    }
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error) -> Void in
            if (error != nil) {
                print("Error: " + (error?.localizedDescription)!)
                return
            }
            if (placemarks?.count > 0) {
                let pm = placemarks![0]
                self.placemark = pm
                print(self.placemark.areasOfInterest)
                self.mLocationManager.stopUpdatingLocation()
            }
        })
    }
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        print("Error: " + (error.localizedDescription))
    }
    func getPlacemark() -> CLPlacemark{
        return self.placemark
    }
}

在我的ViewController中,我将其作为实例变量(currentLocation=currentLocation()),并尝试同时使用

let userPlacemark=currentLocation.getPlacemark()和let userPlacemark=currentLocation.placemark但什么都不起作用。

有没有一种方法可以拥有自己的类或结构来获取当前位置并在其他ViewControllers中使用它?

您的代码有两个观察结果:

  1. 一旦完成了成员变量的设置,就不会在init中调用[super-init]。将init修改为

         init(){
           placemark = CLPlacemark()
            mLocationManager = CLLocationManager()
            mLocationManager.desiredAccuracy = kCLLocationAccuracyBest
            mLocationManager.requestWhenInUseAuthorization()
            mLocationManager.startUpdatingLocation()
            super.init()
            mLocationManager.delegate = self
           }
    
  2. 正在设置位置经理的委派。您应该在创建位置管理器实例后不久在init中执行此操作。请参阅上面的init代码。

相关内容

  • 没有找到相关文章

最新更新