2016-04-21 4 views
1

Попытка заставить мою кнопку Clear работать, но как новый программист У меня все еще есть некоторые проблемы с поиском логики. Калькулятор работает отлично, но когда я нажимаю Clear, ничего не происходит.кнопка очистки в калькуляторе не отвечает

class ViewController: UIViewController { 

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

} 

@IBOutlet weak var outputLbl: UILabel! 

var btnSound: AVAudioPlayer! 

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


override func viewDidLoad() { 
    super.viewDidLoad() 

    let path = NSBundle.mainBundle().pathForResource("btn", ofType: "wav") 
    let soundUrl = NSURL(fileURLWithPath: path!) 

    do{ 
     try btnSound = AVAudioPlayer(contentsOfURL: soundUrl) 
     btnSound.prepareToPlay() 
    } catch let err as NSError{ 
    print(err.debugDescription) 
    } 
} 

@IBAction func numberPressed(btn: UIButton!){ 
    playSound() 
    runningNumber += "\(btn.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(currentOperation) 
} 

@IBAction func onClearPressed(sender: AnyObject) { 
    processOperation(Operation.Empty) 
} 

func processOperation(op: Operation) { 
    playSound() 

    if currentOperation != Operation.Empty{ 
     //run math 

     //a user selected an operator, but then selected another operator without 
     //first entering a number 
     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)!)" 
     } else if currentOperation == Operation.Empty{ 

      result = "" 
      outputLbl.text = result 


      } 

     leftValStr = result 
     outputLbl.text = result 

     } 


     currentOperation = op 


    }else{ 
     //first time its been pressed 
     leftValStr = runningNumber 
     runningNumber = "" 
     currentOperation = op 
    } 
} 

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

ответ

0

я не уверен в этом, но попробуйте этот код может быть, это поможет вам

@IBAction func onClearPressed(sender: AnyObject) 
{ 
     outputLbl.text = @""; 
    //processOperation(Operation.Empty) 
} 
+0

Большое спасибо !!! бы сделать некоторые Твик: D outputLbl.text = «0» Теперь, когда я нажимаю кнопку Clear он сбрасывает и установить калькулятор в 0 – Koljane

+1

Сделает момент я заработать 15 очков рептаций: D – Koljane

0

Посмотрите на свой код еще раз - у вас есть чек:

if currentOperation != Operation.Empty { ... 

, а затем

... else if currentOperation == Operation.Empty { 

Тело второй, если не будет выполнена!

0
else{ 
    //first time its been pressed 
    leftValStr = runningNumber 
    runningNumber = "" 
    currentOperation = op 
    outputLbl.text = "" 
} 

В вашей еще части вы должны очистить метку. Сначала вы проверили, чтобы операция не была пустой, и она была определена одинаково в теле.

+0

К сожалению это помогло, но вмятина это дало мне новые идеи: D Спасибо за попытку помочь. – Koljane

Смежные вопросы