2017-11-09 12 views
0

스위프트 4를 사용하고 있습니다. 숫자는 모두 Int입니다. 계산기 앱에 여러 자리 숫자가 표시되지 않고 연산이 항상 0을 반환합니까?

그래서 내가 계산 클래스 파일 제작 :

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 = "=" 
    } 

을 그리고 내가 얻을 AC 버튼, 숫자 버튼 및 조작 버튼에 대한 UIControllerView 3 개 기능을 만든 '0-9'와 '-, + , *, /, = "버튼 제목에서 직접.

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 숫자를 넣어하려고 할 때마다, 그냥이 반환 한 후 항상 "resultTextField"에 0을 반환 사업자 것 1. 두 번째 문제로 대체한다는 것입니다.

+0

어떤 계산을 테스트 했습니까? 'calculator'를 호출 할 때'operationButton'의 값은 무엇입니까? – Yannick

+0

@ Yannick 항상 0입니다. 기능 버튼 중 하나를 누를 때마다 resultTextField가 0으로 설정됩니다. – ciklukylok

+0

'print (operationButton)'은'calculator()'함수 내에서 무엇을 출력합니까? – Yannick

답변

0

numberButtonPressed 함수는 버튼 텍스트를 읽고 currentNumber을 대체 한 다음 resultTextField.text에 할당합니다. 원하는 것은 현재 숫자에 새 숫자를 더하는 함수입니다. Calculator 클래스에 있습니다.

func pressedDigit(_ digit: Int) { 
    currentNumber = currentNumber * 10 + digit 
} 

그러면이 함수를 호출하고 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 만 받고 컴파일러 오류는 다음과 같습니다 : '((Character))'형식의 인수 목록으로 'Int'형식의 이니셜 라이저를 호출 할 수 없습니다. – ciklukylok

+0

@ciklukylok 대답을 – Yannick

+0

업데이트했습니다. 불행히도 작동하지 않습니다. 어느 한 쪽. 나는 누군가에 의해 언급되는 것이 너무 단순 할 수도 있습니다. – ciklukylok