2017-02-03 3 views
-1


В коде есть одна небольшая проблема, которую я пытаюсь решить, но еще не нашел решение.
Этот код предназначен для калькулятора.
Выполнение правильных расчетов.
Но когда я нажимаю кнопку «clear», перед новым вычислением остается «0».
Например: Я нажимаю «clear» и после «2». На экране появится «02».
Я был бы очень признателен, если бы кто-то посмотрел на код и посмотрел решение.Быстрый калькулятор. «0» остается на экране

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

Добавить условное значение на ваш номер. Подписано, чтобы проверить 'if whatever ==" 0 "заменить его иначе, добавив его в строку –

+0

. Откуда появляется' 0' после нажатия 'clear'? Вы имеете дело с текстом, а не с цифрами, добавляя цифры, так что ведущие нули остаются. – vadian

ответ

0

0 пришли из Operation.Empty
Я решил эту проблему следующим образом:
if (runningNumber == "0") { runningNumber.remove(at: runningNumber.startIndex) }
я не уверен, что это решение является оптимальным, но теперь калькулятор работает отлично
Я благодарю всех, кто нашел время, чтобы помочь. Спасибо вам, ребята!

0
  1. Проверьте, что вы IBOutlets (возможно, у вас есть четкие кнопки, также привязываться к методу numberPressed)
  2. Проверить теги ваших кнопок
  3. Добавить журнал внутри numberPressed(), чтобы проверить, если что-то пойдет не так с runningNumber
Смежные вопросы