ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] 간단한 계산기 만들기
    iOS 2022. 10. 6. 13:43
    간단하게 사칙연산 (+, -, *, /)이 되는 계산기능 구현 
    - 텍스트 필드의 값을 가져와서 계산을 하고 버튼을 누르면 다음 뷰로 넘어가서 결과값이 나오도록한다.

    [View 구상]

    - 간단하게 Label과 Textfield, button, stack view를 이용해서 view 구도를 잡았다.

    - 결과값이 보여지는 화면은 라벨을 중간에 크게 배치했다.

     

    [ViewController 코드] 

    - 값을 넣고, 버튼을 누르는 화면

    //
    //  ViewController.swift
    //  week3_LifeCycle
    //
    //  Created by 김민경 on 2022/10/03.
    //
    
    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var firstTextField: UITextField!
        @IBOutlet weak var secondTextField: UITextField!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            print("viewDidLoad\n")
            // Do any additional setup after loading the view.
        }
        
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            print("viewWillAppear\n")
        }
    
        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
            print("viewDidAppear\n")
        }
    
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
            print("viewWillDisappear\n")
        }
    
        override func viewDidDisappear(_ animated: Bool) {
            super.viewDidDisappear(animated)
            print("viewDidDisappear\n")
        }
    
        //화면 전환
        @IBAction func buttonDidTap(_ sender: Any) {
            // typecasting (opitonal 이용)
            guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
    
            
            // 덧셈을 해서 다음 뷰에 넘기는 로직
            guard let firstNumber=firstTextField.text else {return}
            
            guard let secondNumber=secondTextField.text else {return}
            
            // 덧셈 결과 담기 (optional : ! 이용, guard문을 사용하는게 더 안전하긴함)
            let result = Int(firstNumber)! + Int(secondNumber)!
            
            nextViewController.resultString = String(result) // 덧셈의 결과를 담는다.
            
            //nextViewController.modalPresentationStyle = .fullScreen
            present(nextViewController, animated: true)
        }
        
        
        
        @IBAction func minusDidTap(_ sender: Any) {
            guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
    
            guard let firstNumber=firstTextField.text else {return}
            
            guard let secondNumber=secondTextField.text else {return}
            
            let result = Int(firstNumber)! - Int(secondNumber)!
            
            nextViewController.resultString = String(result) 
            
            //nextViewController.modalPresentationStyle = .fullScreen
            present(nextViewController, animated: true)
        }
        
        
        @IBAction func multipleDidTap(_ sender: Any) {
            guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
    
            guard let firstNumber=firstTextField.text else {return}
            
            guard let secondNumber=secondTextField.text else {return}
            
            let result = Int(firstNumber)! * Int(secondNumber)!
            
            nextViewController.resultString = String(result)
            
            //nextViewController.modalPresentationStyle = .fullScreen
            present(nextViewController, animated: true)
        }
        
        
        
        @IBAction func divideDidTap(_ sender: Any) {
            guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
    
            guard let firstNumber=firstTextField.text else {return}
            
            guard let secondNumber=secondTextField.text else {return}
            
            let result = Int(firstNumber)! / Int(secondNumber)!
            
            nextViewController.resultString = String(result)
            
            //nextViewController.modalPresentationStyle = .fullScreen
            present(nextViewController, animated: true)
        }
        
    }

     

    위 전체 코드를 사칙연산별로 살펴보면 우선 텍스트 필드의 값을 가져와야 하므로 그 값을 저장하는 변수를 선언해준다.

     @IBOutlet weak var firstTextField: UITextField!
     @IBOutlet weak var secondTextField: UITextField!

     

    화면전환을 하면서 텍스트 필드에있는 값이 계산되어 넘어가야 하므로, 이 페이지에서 값을 계산해준다.

    버튼을 눌렀을때, 계산을 하는것이므로 버튼 함수를 만들어준다.

    @IBAction func buttonDidTap(_ sender: Any) {
            // typecasting (opitonal 이용)
            guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
    
            
            // 덧셈을 해서 다음 뷰에 넘기는 로직
            guard let firstNumber=firstTextField.text else {return}
            
            guard let secondNumber=secondTextField.text else {return}
            
            // 덧셈 결과 담기 (optional : ! 이용, guard문을 사용하는게 더 안전하긴함)
            let result = Int(firstNumber)! + Int(secondNumber)!
            
            nextViewController.resultString = String(result) // 덧셈의 결과를 담는다.
            
            //nextViewController.modalPresentationStyle = .fullScreen
            present(nextViewController, animated: true)
        }

    다음 화면에 값이 나와야 하므로 화면 전환을 위해 아래 코드를 적어주고

    guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}

    텍스트필드의 값을 가져온다.

    guard let firstNumber=firstTextField.text else {return}
    guard let secondNumber=secondTextField.text else {return}

    덧셈을 할때는 강제 Unwrapping을 이용하고, 텍스트 필드의 값은 String형이므로 Int형으로 변환해준다음에 계산해준다.

    결과값을 다시 String형으로 바꿔주어, 다음뷰에 Label에 저장해준다.

    let result = Int(firstNumber)! + Int(secondNumber)!
    nextViewController.resultString = String(result)

    나머지 계산(-, *,/)도 사칙연산 부분만 바꿔주면된다.

     

    • 나머지 연산(-, *,/) 부분
    @IBAction func minusDidTap(_ sender: Any) {
            guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
    
            guard let firstNumber=firstTextField.text else {return}
            
            guard let secondNumber=secondTextField.text else {return}
            
            let result = Int(firstNumber)! - Int(secondNumber)!
            
            nextViewController.resultString = String(result) 
            
            //nextViewController.modalPresentationStyle = .fullScreen
            present(nextViewController, animated: true)
        }
        
        
        @IBAction func multipleDidTap(_ sender: Any) {
            guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
    
            guard let firstNumber=firstTextField.text else {return}
            
            guard let secondNumber=secondTextField.text else {return}
            
            let result = Int(firstNumber)! * Int(secondNumber)!
            
            nextViewController.resultString = String(result)
            
            //nextViewController.modalPresentationStyle = .fullScreen
            present(nextViewController, animated: true)
        }
        
        
        
        @IBAction func divideDidTap(_ sender: Any) {
            guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}
    
            guard let firstNumber=firstTextField.text else {return}
            
            guard let secondNumber=secondTextField.text else {return}
            
            let result = Int(firstNumber)! / Int(secondNumber)!
            
            nextViewController.resultString = String(result)
            
            //nextViewController.modalPresentationStyle = .fullScreen
            present(nextViewController, animated: true)
        }

     

    [SecondViewController 코드] 

    - 계산한 결과값이 보여지는 화면

    //
    //  SecondViewController.swift
    //  week3_LifeCycle
    //
    //  Created by 김민경 on 2022/10/03.
    //
    
    import UIKit
    
    class SecondViewController: UIViewController {
    
        // 계산 결과를 담을 변수 선언
        var resultString="default 값" // 계산 결과가 담길 예정
        @IBOutlet weak var resultLabel: UILabel!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            resultLabel.text = resultString // 계산 결과
            // Do any additional setup after loading the view.
        }
        
        // 생명주기 전 단계이므로 viewWillAppear에서 처리해도 문제없음
    //    override func viewWillAppear(_ animated: Bool) {
    //        super.viewWillAppear(animated)
    //        resultLabel.text = resultString // 덧셈의 결과
    //    }
    
    }

    계산 결과를 담을 변수를 선언해주고, view가 load되었을때, Label에 계산 결과가 나오도록 해준다.

     

     

    + ViewController간 데이터 전달 

    guard let nextViewController = UIStoryboard(name : "Main", bundle:nil).instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {return}

    버튼을 누르면 다음뷰로 넘어가도록 해놓았으므로

    var resultString="default 값" // 계산 결과가 담길 예정
        @IBOutlet weak var resultLabel: UILabel!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            resultLabel.text = resultString // 계산 결과
            // Do any additional setup after loading the view.
        }

    SecondViewController에 계산결과를 담을 변수를 ViewController에서 건들일수가있다. 

    nextViewController.resultString = String(result)

    계산결과값을 resultString에 저장해두면, 다음 화면이 나왔을때, 해당 화면에 결과값이 보여지게된다.

     

    [시연영상]

     

    [Git]

    - standard3 참고

    https://github.com/Eunice991217/UMC_3rd-iOS

     

    GitHub - Eunice991217/UMC_3rd-iOS: sejong UMC 3rd iOS-study

    sejong UMC 3rd iOS-study. Contribute to Eunice991217/UMC_3rd-iOS development by creating an account on GitHub.

    github.com

     

    'iOS' 카테고리의 다른 글

    [iOS] TableView 재사용큐  (0) 2022.10.29
    [iOS] 4주차 세미나 정리  (0) 2022.10.28
    [iOS] 3주차 세미나 정리  (2) 2022.10.03
    [iOS] 전화 기본앱 만들기  (0) 2022.09.29
    [iOS] 2주차 세미나 정리  (0) 2022.09.27
Designed by Tistory.