我正在尝试将我从核心数据检索的String转换为Double。我收到的错误是"可选类型的值' Double?'没有打开;你的意思是使用'!'或'?'?"如果我尝试添加一个!或?,然后我得到一个新的错误"不能强制打开非可选类型的值' Double'"请参阅下面的代码。
@IBAction func proceedTapped(_ sender: Any) {
let l1 = loc1.latitude
let l2 = loc2.latitude
let lg1 = loc1.longitude
let lg2 = loc2.longitude
var lat1 :Double = 0.0
var lat2 :Double = 0.0
var long1 :Double = 0.0
var long2 :Double = 0.0
if let l1 = l1 as? String{
lat1 = Double(l1)
}
if let l2 = l2 as? String{
lat2 = Double(l2)
}
if let lg1 = lg1 as? String{
long1 = Double(lg1)
}
if let lg2 = lg2 as? String{
long2 = Double(lg2)
}
let earthR:Double = 3959.0
let step1 = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(abs(long1-long2)))
let dist = step1*earthR
答案 0 :(得分:0)
您应该检查您的字符串是否正确,或者它看起来像Double format
var lat1 = "4.0"
if let lat1 = lat1 as? String{
print(Double(lat1)) // 4.0
}
答案 1 :(得分:0)
无法保证您的字符串可以转换为Double(例如,您的字符串是“hello”),因此Double()初始化程序是一个可用的初始化程序。换句话说,Double(string :)方法返回一个可选的Double。
因此,决定如何处理无法转换为Double的问题。例如:
if let l1 = l1 as? String{
lat1 = Double(l1) ?? 0.0
}