-
[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