CLLocation2D 没有从变量中获取赋值
CLLocation2D doesn't get value assigned from a variable
我正在从 Firebase 获取纬度和经度值并将其作为字符串存储到 aLatitudeArray 和 aLongitudeArray 中。该部分运行良好,随着 Firebase 中子项的更改,数组被填充。然后我想从早期的数组重建一个 CLLocation2D 数组,但是当我将值分配给一个变量时,它得到 nil。我的功能是:
func drawAlerts() { // to rewrite based on aLatituteArray and aLongitudeArray generated from firebase incoming data
var alertDrawArrayPosition = 0
while alertDrawArrayPosition != (alertNotificationArray.count - 1) {
var firebaseAlertLatidute = aLatitudeArray[alertDrawArrayPosition] // get String from alertLaitudeArray
let stringedLatitude: Double = (firebaseAlertLatidute as NSString).doubleValue // converts it to Double
var firebaseAlertLongitude = aLongitudeArray[alertDrawArrayPosition] // get string from alertLongitudeAray
let stringeLongitude: Double = (firebaseAlertLongitude as NSString).doubleValue //converts it to Double
var recombinedCoordinate: CLLocationCoordinate2D!
//
recombinedCoordinate.latitude = stringedLatitude // Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
recombinedCoordinate.longitude = stringeLongitude // Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
// alertNotificationArray.append(recombinedCoordinate!) // Build alertNotificationArray
alertDrawArrayPosition = ( alertDrawArrayPosition + 1 )
}
}
我阅读了很多帖子,但没有建议的解决方案有效。
在 运行 值是:
firebaseAlertLatidute 字符串“37.33233141”
stringedLatitude Double 37.332331410000002(转换后添加额外的 0000002)
firebaseAlertLongitude 字符串“-122.0312186”
stringeLongitude Double -122.0312186
重组坐标CLLocationCoordinate2D? nil none(这是来自错误行)。
从控制台我得到了这个打印:
fir aLongitudeArray ["-122.0312186"]
fir aLatitudeArray ["37.33233141"]
为什么不赋值?
嗯,这里没有什么大问题。你只是在声明 recombinedCoordinate
变量时使用 !
做错了。
这一行声明了一个变量,并告诉Swift:嘿,目前我没有初始化这个,但我要初始化它,相信我。
var recombinedCoordinate: CLLocationCoordinate2D!
但是,在下一行中,您试图设置此实例的变量。
recombinedCoordinate.latitude = stringedLatitude
看到我要去哪里了吗?您尚未初始化 CLLocationCoordinate2D
实例。 recombinedCoordinate
为零。避免 nil 访问是 Swift 到处都有 Optional 类型的主要原因。
如果你写了 CLLocationCoordinate2D?
XCode 稍后会告诉你,这个调用是不安全的,或者,它不会在看到它之后尝试设置 属性为零。
为了解决您的问题,我将编写以下内容:
let recombinedCoordinate: CLLocationCoordinate2D(latitude: stringedLatitude, longitude: stringeLongitude)
此外,我建议您改进变量命名。 "stringedLatitude" 和 "stringeLongitude" 没有意义,因为它们实际上是 Double 类型。
最后,我会避免使用 .doubleValue
,参见
你需要像这样初始化它
let recombinedCoordinate = CLLocationCoordinate2D(latitude:stringedLatitude, longitude:stringeLongitude)
这样
var recombinedCoordinate: CLLocationCoordinate2D!
recombinedCoordinate.latitude = stringedLatitude // here recombinedCoordinate is nil as you never initiated it
我正在从 Firebase 获取纬度和经度值并将其作为字符串存储到 aLatitudeArray 和 aLongitudeArray 中。该部分运行良好,随着 Firebase 中子项的更改,数组被填充。然后我想从早期的数组重建一个 CLLocation2D 数组,但是当我将值分配给一个变量时,它得到 nil。我的功能是:
func drawAlerts() { // to rewrite based on aLatituteArray and aLongitudeArray generated from firebase incoming data
var alertDrawArrayPosition = 0
while alertDrawArrayPosition != (alertNotificationArray.count - 1) {
var firebaseAlertLatidute = aLatitudeArray[alertDrawArrayPosition] // get String from alertLaitudeArray
let stringedLatitude: Double = (firebaseAlertLatidute as NSString).doubleValue // converts it to Double
var firebaseAlertLongitude = aLongitudeArray[alertDrawArrayPosition] // get string from alertLongitudeAray
let stringeLongitude: Double = (firebaseAlertLongitude as NSString).doubleValue //converts it to Double
var recombinedCoordinate: CLLocationCoordinate2D!
//
recombinedCoordinate.latitude = stringedLatitude // Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
recombinedCoordinate.longitude = stringeLongitude // Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
// alertNotificationArray.append(recombinedCoordinate!) // Build alertNotificationArray
alertDrawArrayPosition = ( alertDrawArrayPosition + 1 )
}
}
我阅读了很多帖子,但没有建议的解决方案有效。
在 运行 值是:
firebaseAlertLatidute 字符串“37.33233141”
stringedLatitude Double 37.332331410000002(转换后添加额外的 0000002)
firebaseAlertLongitude 字符串“-122.0312186”
stringeLongitude Double -122.0312186
重组坐标CLLocationCoordinate2D? nil none(这是来自错误行)。
从控制台我得到了这个打印:
fir aLongitudeArray ["-122.0312186"]
fir aLatitudeArray ["37.33233141"]
为什么不赋值?
嗯,这里没有什么大问题。你只是在声明 recombinedCoordinate
变量时使用 !
做错了。
这一行声明了一个变量,并告诉Swift:嘿,目前我没有初始化这个,但我要初始化它,相信我。
var recombinedCoordinate: CLLocationCoordinate2D!
但是,在下一行中,您试图设置此实例的变量。
recombinedCoordinate.latitude = stringedLatitude
看到我要去哪里了吗?您尚未初始化 CLLocationCoordinate2D
实例。 recombinedCoordinate
为零。避免 nil 访问是 Swift 到处都有 Optional 类型的主要原因。
如果你写了 CLLocationCoordinate2D?
XCode 稍后会告诉你,这个调用是不安全的,或者,它不会在看到它之后尝试设置 属性为零。
为了解决您的问题,我将编写以下内容:
let recombinedCoordinate: CLLocationCoordinate2D(latitude: stringedLatitude, longitude: stringeLongitude)
此外,我建议您改进变量命名。 "stringedLatitude" 和 "stringeLongitude" 没有意义,因为它们实际上是 Double 类型。
最后,我会避免使用 .doubleValue
,参见
你需要像这样初始化它
let recombinedCoordinate = CLLocationCoordinate2D(latitude:stringedLatitude, longitude:stringeLongitude)
这样
var recombinedCoordinate: CLLocationCoordinate2D!
recombinedCoordinate.latitude = stringedLatitude // here recombinedCoordinate is nil as you never initiated it