在Swift 3中将可选字符串转换为double

时间:2016-11-02 04:46:02

标签: ios swift swift3


我有一个选项字符串,并希望将其转换为double 这在Swift 2中有效,但自从转换为Swift 3后,我的值为0。

var dLati = 0.0
dLati = (latitude as NSString).doubleValue

我有检查,纬度有一个可选的字符串值,如-80.234543218675654,但是dLati值是0


***************好的,为了清晰起见的新更新*****************
我有一个viewcontroller,我有一个按钮,当触摸按钮时,它将调用另一个viewcontroller并传递一些值给它 这是第一个viewcontroller的代码

var currentLatitude: String? = ""
var currentLongitude: String? = ""
var deviceName = ""
var address = ""
// somewhere in the code, currentLatitude and currentLongitude are get set  
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "map" {
       let destViewController : MapViewController = segue.destination as! MapViewController
       print(currentLongitude!)  // Print display: Optional(-80.192279355363768)
       print(currentLatitude!) // Print display: Optional(25.55692663937162) 
       destViewController.longitude = currentLongitude!
       destViewController.latitude = currentLatitude!
       destViewController.deviceName = deviceName
       destViewController.address = address
    }
}

以下是名为MapViewController的第二个视图控制器的代码

   var longitude: String? = " "
   var latitude: String? = ""
   .
   .
   override func viewDidLoad() {
       if let lat = latitude {
          print(lat) // Print display: optiona(25.55692663937162)
          dLati = (lat as NSString).doubleValue
          print(dLati)  // Print display: 0.0
       }
       .
       .
   }

由于 博尔纳

10 个答案:

答案 0 :(得分:23)

在不需要使用Foundation类型的情况下实现此目的的一种安全方法是使用Double的初始化程序:

$(ib).closest('td').prop('textContent',888);

答案 1 :(得分:6)

安全地打开latitude值,然后使用

var dLati = 0.0

if let lat = latitude {
    dLati = (lat as NSString).doubleValue
}

答案 2 :(得分:5)

let dLati = Double(latitude ?? "") ?? 0.0

答案 3 :(得分:3)

此代码工作正常。

var dLati = 0.0
let latitude: String? = "-80.234543218675654"
if let strLat = latitude {
    dLati = Double(strLat)!
}

答案 4 :(得分:1)

当你得到一个像这样的双重值的字符串

"Optional(12.34567)"

您可以使用Regex从字符串中取出double值。 如果字符串是"Optional(12.34567)"

,这是正则表达式的示例代码
let doubleLatitude = location.latitude?.replacingOccurrences(of: "[^\\.\\d+]", with: "", options: [.regularExpression])

答案 5 :(得分:1)

您可以在一行中完成此操作。

var latitude: Double = Double("-80.234543218675654") ?? 0.0

这将创建一个名为latitude的变量,其类型为Double,可以使用String中的成功Double进行实例化,或者返回值为0.0

答案 6 :(得分:0)

不要将其转换为NSString,您可以将其强制转换为Double,但如果失败则会退回。像这样:

let aLat: String? = "11.123456"
let bLat: String? = "11"
let cLat: String? = nil

let a = Double(aLat!) ?? 0.0 // 11.123456
let b = Double(bLat!) ?? 0.0 // 11
let c = Double(cLat!) ?? 0.0 // 0

所以在你的情况下:

dLati = Double(latitude!) ?? 0.0

<强>更新 要处理nil值,请执行以下操作(请注意,让cLat为nil

// Will succeed
if let a = aLat, let aD = Double(aLat!) {
    print(aD)
}
else {
    print("failed")
}

// Will succeed
if let b = bLat, let bD = Double(bLat!) {
    print(bD)
}
else {
    print("failed")
}

// Will fail
if let c = cLat, let cD = Double(cLat!) {
    print(cD)
}
else {
    print("failed")
}

答案 7 :(得分:0)

实际上,“可选”这个词是字符串的一部分。不确定它是如何添加到字符串中的?但我修复它的方式就是这样。纬度是这个字符串&#34;可选(26.33691567239162)&#34;然后我做了这个代码

let start = latitude.index(latitude.startIndex, offsetBy: 9) 
let end = latitude.index(latitude.endIndex, offsetBy: -1) 
let range = start..<end 
latitude = latitude.substring(with: range) 

并将此作为最终值
26.33691567239162

答案 8 :(得分:0)

swift 3.1 中,我们可以组合扩展和具体约束扩展

extension Optional where Wrapped == String
{
    var asDouble: Double
    {
        return NSString(string: self ?? "").doubleValue
    }
}

或者

extension Optional where Wrapped == String
{
        var asDouble: Double
        {
            return Double(str ?? "0.00") ?? 0.0
        }
}

答案 9 :(得分:-1)

雨燕4

 let YourStringValue1st = "33.733322342342" //The value is now in string
 let YourStringValue2nd = "73.449384384334" //The value is now in string

 //MARK:- For Testing two Parameters 
 if let templatitude = (YourStringValue1st as? String), let templongitude = (YourStringValue2nd as? String)
 {
     movetosaidlocation(latitude: Double(templat)!, longitude: Double(templong)!, vformap: cell.vformap)
 }


 let YourStringValue = "33.733322342342" //The value is now in string
 //MARK:- For Testing One Value
 if let tempLat = (YourStringValue as? String)
 {
      let doublevlue = Double(tempLat)
      //The Value is now in double (doublevlue)
 }