[iOS / Swift] Storyboard 간단한 계산기 만들기(3) 코드개선
2025. 1. 6. 17:51
지난 글에서 말했듯이 이번엔 값이 입력되지 않았을 때 경고창을 띄우는 기능을 추가해 볼것임.
func showAlert(message: String) {
let alert = UIAlertController(title: "알림", message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: "확인", style: .default)
alert.addAction(okAction)
present(alert, animated: true)
}
먼저 showAlert라는 함수를 생성해 알림을 띄우는 함수를 만드는 것이 첫번쨰임. 이걸 넣어주면 되는데 적용해 보겠음.
@IBAction func calculateButton(_ sender: Any) {
guard let text = firstOperandField.text, let a = Int(text) else {
let alert = UIAlertController(title: "알림", message: "값을 입력해 주세요.", preferredStyle: .alert)
let okAction = UIAlertAction(title: "확인", style: .default)
alert.addAction(okAction)
present(alert, animated: true) // true면 페이드 애니메이션이 추가, false면 애니메이션이 없음
return
}
guard let text = secondOperandField.text, let b = Int(text) else {
let alert = UIAlertController(title: "알림", message: "값을 입력해 주세요.", preferredStyle: .alert)
let okAction = UIAlertAction(title: "확인", style: .default)
alert.addAction(okAction)
present(alert, animated: true)
return
}
guard let op = operatorButton.title(for: .normal) else {
let alert = UIAlertController(title: "알림", message: "연산자를 선택해 주세요.", preferredStyle: .alert)
let okAction = UIAlertAction(title: "확인", style: .default)
alert.addAction(okAction)
present(alert, animated: true)
return
}
이런 식으로 각각 연산자, 숫자 위에칸, 아래칸이 비었을 때 경고창이 뜨게 했음
근데 매번 이런식으로 경고창이 뜨는 코드를 넣는건 너무 가독성이 떨어지고 코드가 길어짐.
이걸 함수로 묶어서 한번에 정리해보겠음.
func showAlert(message: String) {
let alert = UIAlertController(title: "알림", message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: "확인", style: .default)
alert.addAction(okAction)
present(alert, animated: true) // true면 페이드 애니메이션이 추가, false면 애니메이션이 없음
}
이렇게 `Alert`창을 띄우는 메서드를 만들어주고 이걸 기존에 `Alert`창을 나오게하는 부분에서 `showAlert`를 불러와주기만 하면 됨.
@IBAction func calculateButton(_ sender: Any) {
guard let text = firstOperandField.text, let a = Int(text) else {
showAlert(message: "값을 입력해 주세요")
return
}
이런 방식으로 `message`에 내가 띄울 경고 메세지만 정해주면 됨
전체코드로 정리해보면
//
// ViewController.swift
// Calculator
//
// Created by 김광현 on 12/4/24.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var firstOperandField: UITextField!
@IBOutlet weak var secondOperandField: UITextField!
func showAlert(message: String) {
let alert = UIAlertController(title: "알림", message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: "확인", style: .default)
alert.addAction(okAction)
present(alert, animated: true) // true면 페이드 애니메이션이 추가, false면 애니메이션이 없음
}
// func 함수 선언 - 함수명 - _ Argument Label 생략, Parameter 이름 : sender, 타입 : Any
// 단, Class안에 있으므로 Func보단 Method라고 부르는게 맞음. 나중에 정리하겠음
@IBAction func selectOperator(_ sender: Any) {
let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
// 액션을 만드는 코드
let plusAction = UIAlertAction(title: "+(더하기)", style: .default) { _ in
self.operatorButton.setTitle("+", for: .normal)
}
actionSheet.addAction(plusAction) // 액션시트에 추가
let minusAction = UIAlertAction(title: "-(빼기)", style: .default) { _ in
self.operatorButton.setTitle("-", for: .normal)
}
actionSheet.addAction(minusAction)
let multiplyAction = UIAlertAction(title: "*(곱하기)", style: .default) { _ in
self.operatorButton.setTitle("*", for: .normal)
}
actionSheet.addAction(multiplyAction)
let divideAction = UIAlertAction(title: "/(나누기)", style: .default) { _ in
self.operatorButton.setTitle("/", for: .normal)
}
actionSheet.addAction(divideAction)
present(actionSheet, animated: true) // 함수를 호출
}
@IBOutlet weak var operatorButton: UIButton!
@IBOutlet weak var resultLabel: UILabel!
@IBAction func calculateButton(_ sender: Any) {
guard let text = firstOperandField.text, let a = Int(text) else {
showAlert(message: "값을 입력해 주세요")
return
}
guard let text = secondOperandField.text, let b = Int(text) else {
showAlert(message: "값을 입력해 주세요")
return
}
guard let op = operatorButton.title(for: .normal) else {
showAlert(message: "연산자를 선택해 주세요")
return
}
var result: Int? = nil
switch op {
case "+" :
result = a + b
case "-" :
result = a - b
case "*" :
result = a * b
case "/" :
result = a / b
default :
showAlert(message: "연산자를 선택해 주세요")
}
guard let result else { return }
resultLabel.text = "\(result)"
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
코드를 줄이면서 Function 즉, func을 사용해서 호출하는 방식으로 코드를 줄여봤음.
함수의 기본 개념
: 함수(Function)는 프로그래밍에서 특정 작업을 수행하도록 설계된 코드 블록임. 함수는 필요할 때 여러 번 호출해서 실행할 수 있음.
- 입력(Input): 함수가 작업을 수행하기 위해 필요로 하는 데이터(매개변수 또는 인자).
- 처리(Processing): 함수가 수행하는 작업 또는 연산.
- 출력(Output): 함수가 반환하는 결과값.
이정도로만 알고 문법 정리하는 곳에서 좀더 자세히 다뤄보겠음
'Swift Study > Storyboard' 카테고리의 다른 글
[iOS / Swift] Storyboard 간단한 로그인 기능 구현(2) 코드 개선 (0) | 2025.01.13 |
---|---|
[iOS / Swift] Storyboard 간단한 계산기 만들기(2) 코드개선 (0) | 2025.01.02 |
[iOS / Swift] Storyboard 간단한 로또앱 만들기 (0) | 2024.12.11 |
[iOS / Swift] Storyboard 간단한 날씨앱 만들기 (1) | 2024.12.11 |
[iOS / Swift] Storyboard 간단한 로그인 기능 구현 (0) | 2024.12.09 |