How to get Location user with CLLocationManager in swift? How to get Location user with CLLocationManager in swift? swift swift

How to get Location user with CLLocationManager in swift?


first add this two line in plist file

1) NSLocationWhenInUseUsageDescription

2) NSLocationAlwaysUsageDescription

Then this is class working complete implement this

import UIKit import CoreLocation@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {var window: UIWindow?var locationManager: CLLocationManager!var seenError : Bool = falsevar locationFixAchieved : Bool = falsevar locationStatus : NSString = "Not Started"func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {    initLocationManager();    return true}// Location Manager helper stufffunc initLocationManager() {    seenError = false    locationFixAchieved = false    locationManager = CLLocationManager()    locationManager.delegate = self    locationManager.locationServicesEnabled    locationManager.desiredAccuracy = kCLLocationAccuracyBest    locationManager.requestAlwaysAuthorization()}// Location Manager Delegate stufffunc locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {    locationManager.stopUpdatingLocation()    if (error) {        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)")        }}}


Following are the simple steps for getting user location in Swift 3

1) First add this line in plist file with description

 NSLocationWhenInUseUsageDescription

2) Add CoreLocation.framework in your project(Under section Build Phases-> Link Binary With Library)

3) In AppDelegate class

   import CoreLocation

4) Create locationManager Object as follows

    var locationManager:CLLocationManager!

5) Write following code in didFinishLaunchingWithOptions

    locationManager = CLLocationManager()    locationManager.delegate = self    locationManager.desiredAccuracy = kCLLocationAccuracyBest    locationManager.distanceFilter = 200    locationManager.requestWhenInUseAuthorization()    locationManager.startUpdatingLocation()

6) Confirm CLLocationManagerDelegate delegate like as follows

   class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate

7) Write CLLocationManagerDelegate delegate method for getting user location

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {    print("location error is = \(error.localizedDescription)")}func locationManager(_ manager: CLLocationManager,                     didUpdateLocations locations: [CLLocation]) {    let locValue:CLLocationCoordinate2D = (manager.location?.coordinate)!    print("Current Locations = \(locValue.latitude) \(locValue.longitude)")}


Since you're declaring location as an explicitly unwrapped optional (CLLocationManager!) it requires an initializer, either in an init method as suggested by jhurray, or just inline, as:

var location: CLLocationManager! = nil

Note that you've got other possible problems as well, including that iOS 8 has new requirements for querying the user for permission to use CoreLocation. See this question for more information.