2015-10-15 114 views
0

我在將一個字符串轉換爲Swift中的Double時出現了令人驚訝的困難時間。只是爲了給你一個我在做什麼的概述,我正在解析一個XML文件並從特定元素中檢索值。該代碼看起來是這樣,在Swift中將字符串轉換爲雙精度(Xcode v 7.0.1)

var lat = "" 
var lati = 0.0 

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 

    if elementName == "lat" { 
     self.lat = foundCharacters 
     self.lati = (self.lat as NSString).doubleValue 
    } 

} 

當我打印self.lat座標得到輸出爲一個字符串「36.97736」。但是,當我打印self.lati Double 0.0被打印。

我也試過

self.lat = foundCharacters 
let formatter = NSNumberFormatter() 
formatter.locale = NSLocale(localeIdentifier: "en_US") 
if let decimalAsDoubleUnwrapped = formatter.numberFromString(self.lat)  { 
    self.lati = decimalAsDoubleUnwrapped.doubleValue 
} 

,我像以前一樣得到同樣的結果。

FIXED:原來在「36.97736」的前面添加了額外的空白字符(空格),Swift抱怨該字符串不是Double格式,因此返回nil。

回答

1

在Swift 2.0中,可以使用Double(「String」),它返回一個可選項。這裏是如何使用它在你的代碼

lat = foundCharacters //not mentioned in the function btw 
    if let doubleFromlat = Double(lat) { 
     lati = doubleFromlat 
    } else { print("foundCharacters does not hold double") } 
+0

感謝您的回覆。我試過這個,並繼續去'else'語句。我打印'lat'和'lat'的座標爲String。然後我打印了「Double(lat)」,而'Double(lat)'則得到了'nil'。 – Ivan

+0

什麼是發現字符?我認爲那是當你將其分配給foundCharacters時lat在其值丟失的值。嘗試在該作業後打印緯度 – Lukas

+0

它是「36.97736」,但在其正面印有4個空格。在「36.97736」上方也打印一條新線。我試圖修剪空白,但那也沒有奏效。 – Ivan

0

你可以試試這個:

extension String { 

    var asDouble : Double? { 
     if let d = Double(self) { 
      return d 
     } 
     return nil 
    } 
} 


let s = "21.5"  
s.asDouble 

enter image description here

+0

謝謝。我知道現在的問題是什麼。 Swift沒有將「36.97736」識別爲Double,所以'self.lati =(self.lat作爲NSString).doubleValue'將'nil'分配給'self.lati'。爲什麼會發生? – Ivan

0

使用NSNumberFormatter().numberFromString(:)?.doubleValue。因此,在您發佈的代碼段的上下文中:

let foundCharacters = "12.345" 
let lat = foundCharacters 
var lati: Double 

if let doubleFromlat = Double(lat) { 
    let lati = NSNumberFormatter().numberFromString(foundCharacters)?.doubleValue 
} else { 
    print("foundCharacters does not hold double") 
} 
相關問題