我试图在他们启动我的应用程序时捕获用户的位置,我创建了这个基本功能,应该得到Lat和Long。
但由于某种原因,它会在意外发现nil时隐藏地返回一个Optional值。
首先我认为这可能是因为我在应用程序启动后立即调用此函数,因此我将函数包装在Delay中。这似乎没有帮助
func setStartLocation(){
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute:
{
let Startlat = String(format: "%f", LocationManager.sharedInstance.location.coordinate.latitude)
let Startlong = String(format: "%f", LocationManager.sharedInstance.location.coordinate.longitude)
)}
}
这是确切的错误
致命错误:在隐式解包可选值时意外发现nil 2019-02-14 10:01:24.610816 + 0000 LoopUltimate [6970:101367]致命错误:在隐式解包可选值时意外发现nil
永远不要申请不可靠的延迟等待某事。
location
显然是nil
,这导致错误。 CLLocationManager
异步工作。
在你的LocationManager
类中,你必须调用startUpdatingLocation()
并实现委托方法
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
在此方法中,调用setStartLocation()
或添加逻辑以在位置有效时收到通知。
请遵循变量名称以小写字母开头的命名约定。