2017-11-09 5 views
0

私はスイフト4を使用していて、数字はすべてIntで表示されています。電卓アプリは複数桁の数値を取得せず、操作は常にゼロを返しますか?

だから私は計算クラスファイル作っ:

import Foundation 
import UIKit 

class Calculation { 

    var result = Int() 
    var operationButton = String() 
    var currentNumber = Int() 

    func calculator() { 

     switch operationButton { 
     case "+": 
      result = result + currentNumber 
     case "-": 
      result = result - currentNumber 
     case "*": 
      result = result * currentNumber 
     case "/": 
      result = result/currentNumber 
     case "=": 
      result = currentNumber 
     default: 
      break 
     } 

    } 

     func textClear() { 
      result = 0 
      currentNumber = 0 
      operationButton = "=" 
    } 

をそして私は、「0-9」を取得するためのボタンACボタン、数字ボタン、および操作のためUIControllerViewに3つの機能を作り、「 - 、+ 、*、/、= "をボタンのタイトルから直接入力します。

class ViewController: UIViewController { 


    @IBOutlet weak var resultTextField: UITextField! 

    var calculation = Calculation() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     calculation.operationButton = "=" 
     resultTextField.text = "\(calculation.result)" 
    } 


    @IBAction func allClearButtonPressed(_ sender: UIButton) { 
     calculation.textClear() 
     resultTextField.text = "\(calculation.result)" 
    } 

    @IBAction func operationButtonPressed(_ sender: UIButton) { 

     calculation.operationButton = sender.titleLabel!.text as String! 
      calculation.operationButton = sender.titleLabel!.text! 
     calculation.calculator() 
     resultTextField.text = "\(calculation.result)" 
    } 

    @IBAction func numberButtonPressed(_ sender: UIButton) { 

     calculation.currentNumber = Int((sender.titleLabel?.text)!)! 
     let numberInput = String(calculation.currentNumber) 
     resultTextField.text = numberInput 
    } 
} 

まず問題は、私は数例えば21を配置しようとするたびに、それはちょうど2を返し、その後、第二の問題は、常に「resultTextField」にゼロを返す演算子だろう1で置き換えることです。

+0

どのような計算をテストしましたか? 'calculator'を呼び出すときの' operationButton'の値は何ですか? – Yannick

+0

@ Yannick関数のボタンのどれかを押すたびにresultTextFieldを0に設定すると常にゼロになります。 – ciklukylok

+0

'print(operationButton)'は 'calculator()'関数の中で何を出力しますか? – Yannick

答えて

0

numberButtonPressed機能はボタンのテキストを読み取り、currentNumberを置き換えてresultTextField.textに割り当てます。あなたが望むのは、現在の番号に新しい桁を追加する関数です。あなたのCalculatorクラス内。

この関数を呼び出して、resultTextFieldにcurrentNumberを割り当てることができます。

@IBAction func numberButtonPressed(_ sender: UIButton) { 
    guard let digit = sender.titleLabel?.text?.flatMap({ Int(String($0)) }) else { return } 
    calculation.pressedDigit(value: digit) 
    resultTextField.text = "\(calculation.currentNumber)" 
} 

計算するたびにcurrentNumberをリセットする必要があります。

+0

.flatMapはCharactersのみを受け取り、コンパイラのエラーメッセージ: '(文字)タイプの引数リストで' Int '型の初期化子を呼び出せません – ciklukylok

+0

@ciklukylok回答を更新しました – Yannick

+0

残念ながらそれは動作しませんどちらか。誰もが言及するのはあまりにも簡単すぎるかもしれないと私は思います。 – ciklukylok

関連する問題