본문 바로가기
Swift/기초

34. 스위프트 기초 문법[Type(3) - 클래스, 열거형 활용]

by UDDT 2025. 2. 7.

Swift/기초 카테고리에 업로드한 모든 내용은 KxCoding 기초 강의를 토대로 작성하였습니다.

 

⎮ 코드 뜯어보기 + 레퍼런스 확인하기

하단에 있는 init 확인

https://developer.apple.com/documentation/uikit/uialertcontroller/init(title:message:preferredstyle:)

 

init(title:message:preferredStyle:) | Apple Developer Documentation

Creates and returns a view controller for displaying an alert.

developer.apple.com

   * Framework를 공부할 때 .Style이나 .type(ex: .actionSheet)으로 끝나는 것은 대부분 열거형임.

 

⎮ 계산기 프로젝트 개선하기 - 사칙 연산 구현 (열거형)

  - 개선할 점 : 문자로 값을 비교하면 오타가 날 때 코드 매칭이 되지 않으며 버그 발생.

  1. 새로운 스위프트 파일 생성  - 이름 : Operator   * 새로운 Type을 만들때는 새로운 swift 파일을 만들고 추가하는 것이 더 좋음.

 

  2. 새로 만든 Operator에서 열거형 선언

enum Operator {
    case plus
    case minus
    case multiply
    case divide
}

  * ViewController와 Operator는 파일이 다르더라도 같은 프로젝트 안에만 있으면 자유롭게 접근이 가능함.

     (Type은 보통 Global Scope에서 선언하기 때문)

 

  3. 코드 추가                  * Type을 선택하지 않는 경우도 있기 때문에 Optional로 선언

var selectedOperator: Operator?

 

  4. 코드 변경

//self.operatorButton.setTitle("+", for: .normal) 이 코드를 아래의 코드로 변경
self.selectedOperator = .plus

 

  5. Calculate Method에서 속성을 바인딩하도록 코드 변경

// guard let op = operatorButton.title(for: .normal) else { 이 코드를 아래의 코드로 변경
guard let op = selectedOperator

 

  6. swtich에서 매칭시키는 값을 열거형 케이스로 변경

  * default에서 오류가 발생하는 이유는, 열거형을 만들 때 4개의 케이스를 만들었고 이미 모두 매칭되고 있기 때문

 

  7. default 구문 삭제

 

  8. 실행해서 확인해보면, 연산자를 선택해도 UI에는 반영이 안됨

 

  9. plusActon코드에서 속성만 바꾸고 있기 때문에 미반영되는 것, 위의 selectOperator에서 주석처리한 코드 다시 살리기

 

  10. 나머지 코드도 추가

  * 나중에는 property observer를 사용하면 더 편하게 구현할 수는 있음

 

사용자 편의성 개선

  1. 키패드 바꾸기 - 입력창의 키보드 Type을 Number Pad로 변경

 

  2. 입력 지우기 - 편집이 시작되면 작성되었던 내용 자동으로 지우기

 

  3. 기본 텍스트 지우기

 

  4. 숫자를 바로 입력할 수 있게 코드 추가

 override func viewDidAppear(_ animated: Bool) {
	super.viewDidAppear(animated)

	firstOperandField.becomeFirstResponder()
}

 

  5. 계산 버튼을 누르면 키보드를 없애도록 calculate method 마지막 부분에 코드 추가

secondOperandField.resignFirstResponder()

 

  6. 오류 발생 - 2번째 입력창에 값을 입력하고 연산자를 선택한 뒤, 1번째 입력창에 값을 입력한 뒤 계산을 누르면 키보드가 안사라짐

 

  7. 첫번째 textFiled에서도 resign하도록 코드 추가

 

  8. 조건을 확인하고 실행하도록 코드 개선

 

becomeFirstResponder - 필요한 값 바로 입력받기

오류메세지 확인을 누르면 첫번째 입력창에 가도록 개선

  1. 코드 추가

firstOperandField.becomeFirstResponder()

그렇게 해도 여전히 포커스가 2번째 창에 있음.

  2. 경고창 작동의 이해

      계산버튼 클릭 > 경고창 표시 > 키보드 사라짐 > 확인을 누를 때 키보드가 다시 표시 됨

      경고창이 입력화면을 덮고 있을 때는 뒤에 있는 화면을 터치할 수 없기 때문에

      경고창이 표시될 때의 firstResponder를 기억해뒀다가, 키보드가 다시 표시될 때 기존의 값을 적용하는 것.

 

  3. 코드 실행 순서 바꾸기

  *코드 실행을 했는데 원하는대로 결과가 안나올 때는 순서 문제인 경우도 있음.

정상 구현이 된 모습

 

최근댓글

최근글

skin by © 2024 ttuttak