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

bor*_*rna 15 ios swift swift3


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

var dLati = 0.0
dLati = (latitude as NSString).doubleValue
Run Code Online (Sandbox Code Playgroud)

我有检查和纬度有一个可选的字符串值,如-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
    }
}
Run Code Online (Sandbox Code Playgroud)

这是第二个视图控制器的代码,称为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
       }
       .
       .
   }
Run Code Online (Sandbox Code Playgroud)

谢谢博尔纳

BJ *_*ler 26

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

if let lat = latitude, let doubleLat = Double(lat) {
  print(doubleLat)  // doubleLat is of type Double now
}
Run Code Online (Sandbox Code Playgroud)


Raj*_*ari 6

latitude安全打开值,然后使用

var dLati = 0.0

if let lat = latitude {
    dLati = (lat as NSString).doubleValue
}
Run Code Online (Sandbox Code Playgroud)


use*_*734 5

let dLati = Double(latitude ?? "") ?? 0.0
Run Code Online (Sandbox Code Playgroud)


MjZ*_*Zac 3

这段代码工作正常。

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

  • 这很危险。仅仅因为 OP 的“纬度”值在某种情况下恰好具有此特定值,并不意味着它始终具有有效值。应进行适当的解包。 (6认同)