在Swift 3中将可选string转换为double

我有一个选项string,并希望将其转换为双倍。
这工作在Swift 2,但自从转换到Swift 3,我得到0的价值。

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

我有检查和纬度有一个像-80.234543218675654类似的可选string值,但dLati值是0

***************好的,新的更新清晰*****************
我有一个viewcontroller,我有一个button,当button被触摸,它会调用另一个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 } . . } 

感谢Borna

一个安全的方法来实现这一点,而不需要使用基础types是使用Double的初始值设定项:

 if let lat = latitude, let doubleLat = Double(lat) { print(doubleLat) // doubleLat is of type Double now } 

打开latitude值,然后使用

 var dLati = 0.0 if let lat = latitude { dLati = (lat as NSString).doubleValue } 
 let dLati = Double(latitude ?? "") ?? 0.0 

这段代码工作正常。

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

当你得到一个像这样的double值的string

 "Optional(12.34567)" 

您可以使用从string中取出double值的正则expression式。 这是正则expression式的示例代码,如果string是"Optional(12.34567)"

 let doubleLatitude = location.latitude?.replacingOccurrences(of: "[^\\.\\d+]", with: "", options: [.regularExpression]) 

其实可选字是string的一部分。 不知道它是如何被添加到string中? 但我固定它的方式就是这样。 纬度是这个string“可选(26.33691567239162)”然后我做了这个代码

 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

不要把它转换成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") } 

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

你可以简单地在一行中做到这一点。

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

这将创build一个名为latitude的variables,该variables的types为Double,该variables或者通过Double的成功实例化,或者被赋予一个回退值0.0