2016-05-13 112 views
1

我想一個字符串我從一個XML文件加載轉換爲浮動,所以我可以設置滑塊值86如何使用Swift 2.0將字符串轉換爲浮點數?

當我使用此代碼,它打印0.0≦但它必須是86!

有人知道爲什麼以及如何解決這個問題嗎?

var strXMLData:String = "" 
    var currentElement:String = "" 
    var passData:Bool=false 
    var passName:Bool=false 
    var parser = NSXMLParser() 
    var string = "" 

    let urlToSend: NSURL = NSURL(string: url)! 
      // Parse the XML 
      parser = NSXMLParser(contentsOfURL: urlToSend)! 
      parser.delegate = self 

      let success:Bool = parser.parse() 

      if success { 
       print("parse success!") 

       print(strXMLData) 

       string = strXMLData 

       var float = (string as NSString).floatValue 
       VolumeSlider.setValue(float) 
       print(float) 



      } else { 
       print("parse failure!") 
      } 




      if(WCSession.isSupported()){ 
       self.session = WCSession.defaultSession() 
       self.session.delegate = self 
       self.session.activateSession() 

    } 
    } 




    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 
     currentElement=elementName; 
     if(elementName=="e2current") 
     { 
      if(elementName=="e2current"){ 
       passName=true; 

      } 
      passData=true; 
     } 

    } 
    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
     currentElement=""; 
     if(elementName=="e2current") 
     { 
      if(elementName=="e2current"){ 
       passName=false; 
      } 
      passData=false; 
     } 

    } 

    func parser(parser: NSXMLParser, foundCharacters string: String) { 
     if(passName){ 
      strXMLData=strXMLData+"\n\n"+string 
     } 

     if(passData) 
     { 
      print(string) 
     } 
    } 

    func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) { 
     NSLog("failure error: %@", parseError) 
    } 
+0

@ coder1000你去哪兒了? –

+0

我在這裏。別擔心。可悲的是,我沒有看到有什麼問題:/ – Coder1000

+0

好,如果你有一個想法讓我知道;)! –

回答

1

我得到它的工作傢伙!

我不得不改變值當我在viewDidLoad但在func parser(parser: NSXMLParser, foundCharacters string: String) {

收到了謝謝你們,但我得到它的工作訣竅。

func parser(parser: NSXMLParser, foundCharacters string: String) { 
    if(passName){ 
     strXMLData=strXMLData+"\n\n"+string 
    } 

    if(passData) 
    { 
     print(string) 

     let numberFormatter = NSNumberFormatter() 
     numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle 
     let theNumber = numberFormatter.numberFromString(string) 
     let floatValue = Float(theNumber!) 

     print(floatValue) 

     VolumeSlider.setValue(floatValue) 

    } 
} 
1

我以前使用過這個解決方案。不知道爲什麼你的代碼沒有工作,但至少這完成了工作......只用幾行代碼。

var textNumber = "123456.789" 
let numberFormatter = NSNumberFormatter() 
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle 
let theNumber = numberFormatter.numberFromString(textNumber) 
var floatValue = Double(theNumber!) //123456.789 
+0

不能正常工作:/。 –

+0

您確定您收到的號碼不是0.0嗎? – Starlord

+0

這是一個很好的代碼,當你使用它時你是如何做到的。但請記住,我必須從字符串去浮動xml文件的接收字符串 –

1

通過您的解析代碼後,我們基本上可以把它簡化爲以下:

設置passDatatrue當我們裏面的元素:

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 
    if (elementName == "e2current") { 
     passData = true; 
    } 
} 

設置passDatafalse時我們不在裏面:

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
    if (elementName == "e2current") { 
     passData = false; 
    } 
} 

保存價值的時候,我們裏面的元素

func parser(parser: NSXMLParser, foundCharacters string: String) { 
    if (passData){ 
     strXMLData = string 
    } 
} 

注意,當你開始增加\n\n字符串,你將無法解析該值。

一個更合理的實施可能會是:

var elementStack: [String] = [] 

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 
    elementStack.append(elementName) 
} 

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
    elementStack.removeLast() 
} 

func parser(parser: NSXMLParser, foundCharacters string: String) { 
    if (elementStack.last == "e2current") { 
     strXMLData = string 
    } 
}