2016-05-13 128 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 
    } 
}