swift 定位封裝一句話使用
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))")
}
}
}
}
相關文章
- Swift-定位,編碼/反編碼功能的封裝Swift封裝
- Swift keychain 官方封裝DemoSwiftAI封裝
- Swift 檔案快取--DDGDataCache_Swift庫高階封裝用法Swift快取封裝
- Swift 仿 Flutter 風格宣告式 UI 封裝思路SwiftFlutterUI封裝
- 一句話解釋TransformerORM
- Swift 運用協議泛型封裝網路層Swift協議泛型封裝
- Swift 核心動畫 面向協議 擴充套件封裝Swift動畫協議套件封裝
- Swift 空資料介面顯示模組封裝實現Swift封裝
- 一句話理解設計模式設計模式
- 本週AI一句話摘要AI
- 一句話總結原型鏈原型
- swift4.0 星星評分starView封裝,xib和純程式碼使用方便簡單SwiftView封裝
- 大白話Swift入門Swift
- 使用async await 封裝 axiosAI封裝iOS
- ToolBar專案封裝使用封裝
- Vue Axios 的封裝使用VueiOS封裝
- iOS 封裝.framework 以及使用iOS封裝Framework
- Java 封裝 SDK 以及使用Java封裝
- 一句話設計模式,不再迷路~設計模式
- 一句話總結隨機森林隨機森林
- 我最喜歡的一句話
- 一句話區分currentTarget和target
- 一句話總結LLE(流形學習)
- 一句話從 MySQL 取出重複行MySql
- 萌新之php一句話木馬PHP
- iptables一句話修復安全漏洞
- 使用ts封裝一個ajax封裝
- RecyclerView使用封裝與優化View封裝優化
- laravel Es的封裝與使用Laravel封裝
- vue中使用axios的封裝VueiOS封裝
- lavarel 8 ES封裝及使用封裝
- Android中Retrofit的封裝使用Android封裝
- 使用promise封裝wx.request()Promise封裝
- Swift – 一句程式碼搞定button圖片和文字佈局Swift
- 【封裝那些事】 缺失封裝封裝
- 一句話總結JS的設計模式JS設計模式
- 一句話判斷網路是否聯通
- 用一句話描述Go語言的命令Go