2016-05-13 6 views
1

文字列をxmlファイルからfloatに変換しようとしているので、スライダの値を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

true

設定passData我々は要素の内側にある:

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

保存私たちは、あなたが文字列に\n\nの追加を開始するとき、あなたはその値を解析することができませんことを要素

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

ノート内にある値。

より賢明な実装は、おそらく次のようになります。

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 
    } 
} 
関連する問題