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 TextView Placeholder封裝SwiftTextView封裝
- Swift keychain 官方封裝DemoSwiftAI封裝
- 一句話入門SEO
- Linux一句話收藏Linux
- Swift 檔案快取--DDGDataCache_Swift庫高階封裝用法Swift快取封裝
- android常用對話方塊封裝Android封裝
- Swift 仿 Flutter 風格宣告式 UI 封裝思路SwiftFlutterUI封裝
- Swift 核心動畫 面向協議 擴充套件封裝Swift動畫協議套件封裝
- SolarNetwork-優雅的Swift網路封裝Swift封裝
- 封裝一個 Swift-Style 的網路模組封裝Swift
- 一句話解釋數字簽名。一句話解釋數字證書
- 一句話理解設計模式設計模式
- 一句話總結原型鏈原型
- ORACLE一句話問答(一)Oracle
- ORACLE 一句話問答(二)Oracle
- 摘抄biti大師一句話
- Linux 一句話命令收藏Linux
- 一句話經驗總結
- 本週AI一句話摘要AI
- 一句話解釋TransformerORM
- Swift 空資料介面顯示模組封裝實現Swift封裝
- Swift 運用協議泛型封裝網路層Swift協議泛型封裝
- ios圖片瀏覽器封裝,一句程式碼呼叫,簡單易用iOS瀏覽器封裝
- 一句話設計模式,不再迷路~設計模式
- 一句話區分currentTarget和target
- 一句話總結隨機森林隨機森林
- 萌新之php一句話木馬PHP
- choop.php一句話指令碼OOPPHP指令碼
- PL/SQL的每天一句話SQL
- SAP一句話入門:Material Management
- SAP一句話入門:Project SystemProject
- SAP一句話入門:Plant MaintenanceAINaN
- Swift - 常用輪播圖封裝,滿足你的日常需求Swift封裝
- Java 封裝 SDK 以及使用Java封裝
- ToolBar專案封裝使用封裝
- iOS 封裝.framework 以及使用iOS封裝Framework
- 大白話Swift入門Swift