How to get Location user with CLLocationManager in swift?

前端 未结 7 2069
鱼传尺愫
鱼传尺愫 2020-11-29 04:49

I have this code on my view controller but this not working:

  import UIKit
  import CoreLocation

  class ViewController: UIViewController, CLLocationManag         


        
7条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-11-29 05:25

    This is the same code as above but cleaned up to work with Swift as of the date of this posting. This worked for me.

    Kudos to the original poster.

    (note, stick this into whatever class you will use to handle your location stuff.)

    var lastLocation = CLLocation()
    var locationAuthorizationStatus:CLAuthorizationStatus!
    var window: UIWindow?
    var locationManager: CLLocationManager!
    var seenError : Bool = false
    var locationFixAchieved : Bool = false
    var locationStatus : NSString = "Not Started"
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        
        self.initLocationManager()
        
    }
        // Location Manager helper stuff
        func initLocationManager() {
            seenError = false
            locationFixAchieved = false
            locationManager = CLLocationManager()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            
            locationManager.requestAlwaysAuthorization()
        }
        
        // Location Manager Delegate stuff
        
        func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
            locationManager.stopUpdatingLocation()
            if ((error) != nil) {
                if (seenError == false) {
                    seenError = true
                    print(error)
                }
            }
        }
        
        func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
            if (locationFixAchieved == false) {
                locationFixAchieved = true
                var locationArray = locations as NSArray
                var locationObj = locationArray.lastObject as CLLocation
                var coord = locationObj.coordinate
                
                println(coord.latitude)
                println(coord.longitude)
            }
        }
        
        func locationManager(manager: CLLocationManager!,  didChangeAuthorizationStatus status: CLAuthorizationStatus) {
                var shouldIAllow = false
                
                switch status {
                case CLAuthorizationStatus.Restricted:
                    locationStatus = "Restricted Access to location"
                case CLAuthorizationStatus.Denied:
                    locationStatus = "User denied access to location"
                case CLAuthorizationStatus.NotDetermined:
                    locationStatus = "Status not determined"
                default:
                    locationStatus = "Allowed to location Access"
                    shouldIAllow = true
                }
                NSNotificationCenter.defaultCenter().postNotificationName("LabelHasbeenUpdated", object: nil)
                if (shouldIAllow == true) {
                    NSLog("Location to Allowed")
                    // Start location services
                    locationManager.startUpdatingLocation()
                } else {
                    NSLog("Denied access: \(locationStatus)")
                }
        }

提交回复
热议问题