swift 定位的封装,使用一句话方便简单。
闭包返回信息:定位Location+反编译地址信息+error
git地址:https://github.com/RainManGO/LocationManager
使用代码:
LocationManager.shareManager.creatLocationManager().startLocation { (location, adress, error) in print("经度 \(location?.coordinate.longitude ?? 0.0)") print("纬度 \(location?.coordinate.latitude ?? 0.0)") print("地址\(adress ?? "")") print("error\(error ?? "没有错误")") }
封装代码:
// // LocationManager.swift // ZYLocationManager // // Created by Nvr on 2018/5/8. // Copyright © 2018年 ZY. All rights reserved. // import UIKit import CoreLocation class LocationManager: NSObject { typealias locationCallBack = (_ curLocation:CLLocation?,_ curAddress:String?,_ errorReason:String?)->() //MARK:-属性 ///单例,唯一调用方法 static let shareManager:LocationManager = LocationManager() private override init() { } var manager:CLLocationManager? //当前坐标 var curLocation: CLLocation? //当前选中位置的坐标 var curAddressCoordinate: CLLocationCoordinate2D? //当前位置地址 var curAddress: String? //回调闭包 var callBack:locationCallBack? func creatLocationManager() -> LocationManager{ manager = CLLocationManager() //设置定位服务管理器代理 manager?.delegate = self //设置定位模式 manager?.desiredAccuracy = kCLLocationAccuracyBest //更新距离 manager?.distanceFilter = 100 //发送授权申请 manager?.requestWhenInUseAuthorization() return self } //更新位置 open func startLocation(resultBack:@escaping locationCallBack){ self.callBack = resultBack if CLLocationManager.locationServicesEnabled(){ //允许使用定位服务的话,开启定位服务更新 manager?.startUpdatingLocation() print("定位开始") } } } extension LocationManager:CLLocationManagerDelegate { func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { //获取最新的坐标 curLocation = locations.last! //停止定位 if locations.count > 0{ manager.stopUpdatingLocation() LonLatToCity() } } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { callBack!(nil,nil,"定位失败===\(error)") } ///经纬度逆编 func LonLatToCity() { let geocoder: CLGeocoder = CLGeocoder() geocoder.reverseGeocodeLocation(self.curLocation!) { (placemark, error) -> Void in if(error == nil){ let firstPlaceMark = placemark!.first self.curAddress = "" //省 if let administrativeArea = firstPlaceMark?.administrativeArea { self.curAddress?.append(administrativeArea) } //自治区 if let subAdministrativeArea = firstPlaceMark?.subAdministrativeArea { self.curAddress?.append(subAdministrativeArea) } //市 if let locality = firstPlaceMark?.locality { self.curAddress?.append(locality) } //区 if let subLocality = firstPlaceMark?.subLocality { self.curAddress?.append(subLocality) } //地名 if let name = firstPlaceMark?.name { self.curAddress?.append(name) } self.callBack!(self.curLocation,self.curAddress,nil) }else{ self.callBack!(nil,nil,"\(String(describing: error))") } } } }