我正试图在用户启动我的应用程序时捕获其位置,我创建了此基本功能,该功能应获得纬度和经度。
但是由于某种原因,它会以意外找到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)
)}
}
这是确切的错误
致命错误:在隐式展开一个 可选值2019-02-14 10:01:24.610816 + 0000 LoopUltimate [6970:101367]致命错误:意外发现为nil 隐式展开一个可选值
答案 0 :(得分:0)
从不施加不可靠的延迟来等待某事。
location
显然是nil
,这会导致错误。 CLLocationManager
异步工作。
在您的LocationManager
类中,您必须调用startUpdatingLocation()
并实现委托方法
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
在此方法中,调用setStartLocation()
或添加逻辑以在位置有效时得到通知。
并且请遵循变量名以小写字母开头的命名约定。