在Swift中将String转换为Double

时间:2018-04-22 14:45:34

标签: swift string casting double

我正在尝试将我从核心数据检索的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

2 个答案:

答案 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
}