2017-11-10 1 views
1

그래서 이것은 내 운영을위한 클래스입니다 :Swift에서 계산기 앱을 만들 수 없습니까? 둘 이상의 숫자가 있습니까?

class Calculation { 

var currentNumber: String = "" 
var resultNumber = Int() 
var operationInput = String() 


func operationIdentifier() { 

    if operationInput == "=" { 
     resultNumber = Int(currentNumber)! 
     print("\(resultNumber)") 
    } else if operationInput == "+" { 
     resultNumber += Int(currentNumber)! 
     print("\(resultNumber)") 
    } else if operationInput == "-" { 
     resultNumber -= Int(currentNumber)! 
     print("\(resultNumber)") 
    } else if operationInput == "*" { 
     resultNumber *= Int(currentNumber)! 
     print("\(resultNumber)") 
    } else if operationInput == "/" { 
     resultNumber /= Int(currentNumber)! 
     print("\(resultNumber)") 
    } else { 
     print("Operation does not exist.") 
    } 

    print("\(resultNumber)") 
} 

그리고 숫자의 제목을 얻기 위해이 버튼을 얻을 곳이다 :

에 가리 켰을 때의 append 명령은 문자열입니다
@IBAction func numberPressed(_ sender: UIButton) { 

    calculation.currentNumber = (sender.titleLabel?.text!)! 
    calculation.currentNumber.append(<#T##other: String##String#>) 
    //calculation.currentNumber.append((sender.titleLabel?.text)!) This is how I use it to append. 
    calculation.operationIdentifier() 
    resultTextField.text = "\(calculation.currentNumber)" 

} 

내가 사용하는 코드 섹션은 이전 번호의 끝에 추가하고, 결과는 항상 약간의 지능 등의 두 배입니다 : 당신이 5를 누르면, 그것은 numberPressed에서 55

+0

원하는 것을 추가하십시오. 당신의 묘사로는 분명하지 않습니다. – Luzo

+0

@ 루조 저는 계산기를 쓰고 있는데, 버튼의 제목에서 숫자를 받아야하는 부분에 붙어 있습니다. 문제는 하나의 숫자 만 가져옵니다. 버튼을 예를 들어 23으로 누르면 2가 제거되고 2는 3을 반환합니다. – ciklukylok

답변

0

당신이 t에서 currentNumber을 설정하는 반환 그는 텍스트에 레이블을 붙이고 같은 값을 다시 붙입니다.

@IBAction func numberPressed(_ sender: UIButton) { 

    guard let label = sender.titleLabel, let numberString = label.text else{ 
     return 
    } 

    calculation.currentNumber.append(numberString) 

    print("currentNumber = \(calculation.currentNumber)") 

} 

또한, 당신은 왜 numberPressed에서 calculation.operationIdentifier() 전화 않습니다 : 그것은 무언가 같이해야 하는가? OperatorPressed 메서드에 해당되지 않습니까?

+0

이 명령은 연산자를 누른 후 이전 번호를 삭제합니까? 네, 맞습니다. – ciklukylok

+0

그것은 그것을 지우지 않을 것이다. 'operationIdentifier' 메쏘드가 끝날 때, 또는 Luzo가'operatorPressed' 액션에서 제안한 것처럼 –

+0

내가 시뮬레이터에서 누르는 모든 숫자의 두 자리수를 여전히 제공하고 있습니다. – ciklukylok

0

우선, 여기 값을 덮어 씁니다 : calculation.currentNumber = (sender.titleLabel?.text!)!. 둘째,를 누른 후에 현재 번호를 지워야합니다.

여기는 내 개념 (편집 된 코드)입니다. 놀이터에서 시도해보십시오.

enum Operator: String { 
    case plus = "+" 
    case minus = "-" 
    case multiply = "*" 
    case divide = "/" 
    case equal = "=" 

} 

class Calculation { 

    var currentNumber: String = "" 
    var resultNumber = Int() 
    var operationInput = String() 

    func recalculate() { 
     if resultNumber == 0 { 
      resultNumber = Int(currentNumber) ?? 0 
      return 
     } 

     guard let sign = Operator(rawValue: operationInput), let number = Int(currentNumber) else { return } 

     switch sign { 
      case .plus: resultNumber += number 
      case .minus: resultNumber -= number 
      case .divide: resultNumber /= number 
      case .multiply: resultNumber *= number 
      case .equal: resultNumber = number 
     } 
    } 

    func operatorPressed(_ op: Operator) { 
     recalculate() 
     operationInput = op.rawValue 
     currentNumber = "" 

     print(resultNumber) 
    } 

    func numberPressed(_ number: String) { 
     currentNumber.append(number) 
    } 
} 

let c = Calculation() 
c.numberPressed("5") 
c.numberPressed("5") 
c.operatorPressed(.plus) 
c.numberPressed("5") 
c.operatorPressed(.multiply) 
c.numberPressed("5") 
c.operatorPressed(.equal) 
c.operatorPressed(.plus) 
c.numberPressed("5") 
c.operatorPressed(.equal) 
+0

고맙습니다.하지만 마지막 부분에 대해 제발 설명해 주시겠습니까? "c.numberPressed ("5 ")"의 개념은 무엇입니까? 테스트 용입니까? – ciklukylok

+0

예, 그렇습니다. 그것은 놀이터에서 수행되었으므로 코드에 맞게 조정되었습니다. 어쩌면 너는 약한 반점을 발견 할 것이다. 일반적으로 피하기 위해 노력하고, 함수의 이름을 올바르게 지정하고 열거 형을 사용하여 가독성을 높입니다. – Luzo

+0

PG에서 제대로 작동하지만 이전과 동일한 결과를 얻고 있습니다. 내 코드와 동일합니다. – ciklukylok

관련 문제