2017-02-03 5 views
-1


In dem Code ist ein kleines Problem, das ich versuche zu lösen, aber noch nicht die Lösung gefunden.
Dieser Code ist für den Taschenrechner.
Es macht richtige Berechnungen.
Aber wenn ich "Clear" -Taste drücken, bleibt vor der neuen Berechnung "0".
Zum Beispiel: Ich drücke "clear" und nach "2". Auf dem Bildschirm erscheint "02".
Ich wäre sehr dankbar, wenn sich jemand den Code ansehen und die Lösung sehen würde.Swift Rechner. "0" bleibt auf dem Bildschirm

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 


@IBOutlet weak var outputLbl: UILabel! 
var btnSound: AVAudioPlayer! 

@IBAction func clearBtnPressed(_ sender: Any) { 
    playSound() 
    runningNumber = "" 
    leftValStr = "" 
    outputLbl.text = "" 
    currentOperation = Operation.Empty 
} 

enum Operation: String { 
    case Divide = "/" 
    case Multiply = "*" 
    case Subtract = "-" 
    case Add = "+" 
    case Empty = "Empty" 
} 

var currentOperation = Operation.Empty 
var runningNumber = "" 
var leftValStr = "" 
var rightValStr = "" 
var result = "" 


override func viewDidLoad() { 
    super.viewDidLoad() 

    let path = Bundle.main.path(forResource: "btn", ofType: "wav") 
    let soundURL = URL(fileURLWithPath: path!) 

    do { 
     try btnSound = AVAudioPlayer(contentsOf: soundURL) 
     btnSound.prepareToPlay() 
    } catch let err as NSError { 
     print(err.debugDescription) 
    } 
    outputLbl.text = "" 
} 


@IBAction func numberPressed(sender: UIButton) { 
    playSound() 
    runningNumber += "\(sender.tag)" 
    outputLbl.text = runningNumber 

} 

@IBAction func onDividePressed(sender: AnyObject) { 
    processOperation(operation: .Divide) 
} 

@IBAction func onMultiplyPressed(sender: AnyObject) { 
    processOperation(operation: .Multiply) 
} 

@IBAction func onSubtractPressed(sender: AnyObject) { 
    processOperation(operation: .Subtract) 
} 

@IBAction func onAddPressed(sender: AnyObject) { 
    processOperation(operation: .Add) 
} 

@IBAction func onEqualPressed(sender: AnyObject) { 
    processOperation(operation: currentOperation) 
} 


func playSound() { 
    if btnSound.isPlaying { 
     btnSound.stop() 
    } 
    btnSound.play() 
} 

func processOperation(operation: Operation) { 
    playSound() 
    if currentOperation != Operation.Empty { 
     if runningNumber != "" { 
      rightValStr = runningNumber 
      runningNumber = "" 

      if currentOperation == Operation.Multiply { 
       result = "\(Double(leftValStr)! * Double(rightValStr)!)" 
      } else if currentOperation == Operation.Divide { 
       result = "\(Double(leftValStr)!/Double(rightValStr)!)" 
      } else if currentOperation == Operation.Subtract { 
       result = "\(Double(leftValStr)! - Double(rightValStr)!)" 
      } else if currentOperation == Operation.Add { 
       result = "\(Double(leftValStr)! + Double(rightValStr)!)" 
      } 

      leftValStr = result 
      outputLbl.text = result 
     } 

     currentOperation = operation 
    } else { 
     leftValStr = runningNumber 
     runningNumber = "" 
     currentOperation = operation 
    } 
} 
} 
+0

fügen Sie eine Bedingung zu Ihrer Zahl hinzuPressed, um 'if whatever ==" 0 "' zu überprüfen, ersetzen Sie es andernfalls an die Zeichenkette –

+0

Woher kommt die '0', nachdem Sie' clear' gedrückt haben? Beim Hinzufügen von Ziffern handelt es sich um Text und nicht um Zahlen, so dass führende Nullen erhalten bleiben. – vadian

Antwort

0

0 kam von Operation.Empty
ich dieses Problem auf folgende Weise gelöst:
if (runningNumber == "0") { runningNumber.remove(at: runningNumber.startIndex) }
Ich bin nicht sicher, dass diese Lösung optimal ist aber jetzt der Rechner funktioniert perfekt
ich allen danken, die sich die Zeit nahmen zu helfen. Danke Jungs!

0
  1. Überprüfen Sie IBOutlets (vielleicht haben Sie Clear-Taste, die auch zu numberPressed Methode binded ist)
  2. prüfen Tags Ihrer Tasten
  3. hinzufügen log innerhalb numberPressed() zu überprüfen, wenn etwas schief geht mit runningNumber
Verwandte Themen