ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 계산기 앱
    iOS/패스트캠퍼스(앱제작) 2022. 4. 3. 13:23

     

    < 주요 기능 >

    UIStackView 

    IBInspecter, IBDesignable

     

     

    - 계산 기능 구현

    //
    //  ViewController.swift
    //  Calculator
    //
    //  Created by YANG on 2022/04/03.
    //
    
    import UIKit
    
    enum Operation {
        case Add
        case Subtract
        case Divide
        case Multiply
        case Unknown
    }
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var numberOuputLabel: UILabel!
        
        var displayNumber = "" // 계산기버튼을 누를때마다 numberOutputLabel에 표시되는 숫자
        var firstOperand = ""  // 이전 계산값을 저장
        var secondOperand = "" // 새롭게 입력되는 값을 저장
        var result = ""
        var currentOperation: Operation = .Unknown // 현재 계산기에 어떤 연산자가 입력되었는지. 연산자의 값을 저장
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
        }
    
        
        @IBAction func tapNumberBtn(_ sender: UIButton) {
            guard let numberValue = sender.title(for: .normal) else { return }
            if self.displayNumber.count < 9 {
                self.displayNumber += numberValue
                self.numberOuputLabel.text = self.displayNumber
            }
            
        }
        
        @IBAction func tapClearBtn(_ sender: UIButton) {
            self.displayNumber = ""
            self.firstOperand = ""
            self.secondOperand = ""
            self.result = ""
            self.currentOperation = .Unknown
            self.numberOuputLabel.text = "0"
            
        }
        
        @IBAction func tapDotBtn(_ sender: UIButton) {
            if self.displayNumber.count < 8, !self.displayNumber.contains(".") {
                self.displayNumber += self.displayNumber.isEmpty ? "0." : "."
                self.numberOuputLabel.text = self.displayNumber
            }
        }
        
        @IBAction func tabDivideBtn(_ sender: UIButton) {
            self.operation(.Divide)
        }
        
        @IBAction func tabMultiplyBtn(_ sender: UIButton) {
            self.operation(.Multiply)
        }
        
        
        @IBAction func tabSubtractBtn(_ sender: UIButton) {
            self.operation(.Subtract)
        }
    
        @IBAction func tabAddBtn(_ sender: UIButton) {
            self.operation(.Add)
        }
        
        @IBAction func tabEqualBtn(_ sender: UIButton) {
            self.operation(self.currentOperation)
        }
        
        // 계산을 담당하는 함수
        func operation(_ operation: Operation) {
            if self.currentOperation != .Unknown {  // 연산자 버튼이 눌려있는 상태
                if !self.displayNumber.isEmpty {
                    self.secondOperand = self.displayNumber
                    self.displayNumber = ""
                    
                    guard let firstOperand = Double(self.firstOperand) else { return }
                    guard let secondOperand = Double(self.secondOperand) else { return }
                    
                    // 연산 수행
                    switch self.currentOperation {
                    case .Add:
                        self.result = "\(firstOperand + secondOperand)"
                    case .Subtract:
                        self.result = "\(firstOperand - secondOperand)"
                        
                    case .Divide:
                        self.result = "\(firstOperand / secondOperand)"
                        
                    case .Multiply:
                        self.result = "\(firstOperand * secondOperand)"
                        
                    default:
                        break
                    }
                    
                    if let result = Double(self.result), result.truncatingRemainder(dividingBy: 1) == 0 {
                        self.result = "\(Int(result))"
                    }
                
                    self.firstOperand = self.result
                    self.displayNumber = self.result
                }
                
                self.currentOperation = operation
                
            } else {  // 연산자버튼이 안눌린 상태 -> 연산자 버튼 클릭
                self.firstOperand = self.displayNumber
                self.currentOperation = operation // 선택한 연산자
                self.displayNumber = ""
                
            }
            
        }
        
    }

    'iOS > 패스트캠퍼스(앱제작)' 카테고리의 다른 글

    날씨 앱  (0) 2022.05.08
    타이머 앱  (0) 2022.05.08
    일기장 앱  (0) 2022.04.20
    할일 리스트(To-Do List) 앱  (0) 2022.04.03
    LED전광판 앱  (0) 2022.04.01

    댓글

Designed by Tistory.