【发布时间】:2021-04-17 06:31:03
【问题描述】:
我想知道用户的当前位置。但是因为我想从多个地方获取这个位置,所以我为它创建了一个函数,而不是设置一个特定的UIViewController 作为委托处理程序。
获取用户位置的方法:
func getUserLocation(completion: @escaping (String?) -> Void) {
let locationManager = CLLocationManager()
let geoCoder = CLGeocoder()
let authorizationStatus = CLLocationManager.authorizationStatus()
print("Authorization status: ", authorizationStatus.rawValue, " ," , CLAuthorizationStatus.notDetermined.rawValue)
if authorizationStatus == CLAuthorizationStatus.notDetermined {
print("Asking for location authorization")
locationManager.requestWhenInUseAuthorization()
}
if authorizationStatus == CLAuthorizationStatus.denied {
completion(nil)
}
if authorizationStatus == CLAuthorizationStatus.authorizedWhenInUse || authorizationStatus == CLAuthorizationStatus.authorizedAlways {
if CLLocationManager.locationServicesEnabled() {
guard let currentLocation = locationManager.location else { return completion(nil) }
geoCoder.reverseGeocodeLocation(currentLocation) { (placemarks, error) in
guard let currentLocPlacemark = placemarks?.first else { return completion(nil) }
print(currentLocPlacemark.country ?? "No country found")
print(currentLocPlacemark.isoCountryCode ?? "No country code found")
guard let isoCode = currentLocPlacemark.isoCountryCode else { return completion(nil) }
completion(isoCode)
}
}
}
}
func incrementLocationInFirebase() {
getUserLocation { (location) in
if let location = location {
//Save Location to Firebase
print("Location: ", location)
}
}
}
func decrementLocationInFirebase() {
// Fetch saved location
// Decrement from firebase
}
我设置了 2 个描述字符串:
- 隐私 - 位置使用说明
- 隐私 - 使用时的位置使用说明
我从viewDidAppear 的主视图控制器调用incrementLocationInFirebase()。位置请求会在模拟器上短暂弹出,然后消失。但是当弹出窗口短暂可见时,它是不可交互的。而且它永远不会出现在实际设备上。
模拟器输出:
【问题讨论】:
标签: ios swift cllocationmanager clgeocoder