iOS/iOS Swift 문법

iOS swift 열거형 enum , switch

Developer-Michelle 2022. 7. 14. 15:12

열거형: 연관된 항목들을 묶어서 표현할 수 있는 타입.

배열이나 딕셔너리 같은 타입과는 다르게, 프로그래머가 정의해준 항목 값 이외에는 추가/수정이 불가.

딱 정해진 값만 열거형 값에 속할 수 있다.

 

열거형 각 항목이 원시값(Raw Value)이라는 형태로(정수, 실수, 문자 타입 등의) 실제 값을 가질수도 있다.

또는 연관값을 사용하여 다른 언어에서 공용체라고 불리는 값의 묶음도 구현 가능.

 

열거형은 switch 구문과 만났을 때 멋지게 활용 가능.

 

*기본 열거형

enum

enum School {

 case primary

 case elementary

.

.

.

}

 

 

*원시 값(raw value) p104~

열거형의 각 항목은 자체로도 하나의 값이지만 항목의 원시값도 가질 수 있다.

즉, 특정 타입으로 지정된 값 가질 수 있다는 뜻.

특정 타입의 값을 원시값으로 가지고 싶다면, 열거형 이름 오른쪽에 타입 명시해주면 된다.

원시값을 사용하고 싶다면, rawValue라는 프로퍼티를 통해 가져올 수 있다.

 

*연관 값

연관 값은 각 항목 옆에 소괄호로 묶어 표현할 수 있다.

 

*항목 순회

1) CaseIterable 프로토콜을 활용한 열거형의 항목 순회

열거형에 포함된 모든 케이스를 알아야 할 때.

enum School: CaseIterable {

 case primary

 case elementary

 case middle

... 

}

 

let allCases: [School] = School.allCases

print(allCases)

//[School.primary, School.elementary, ... School.graduate]

 

2)원시값을 갖는 열거형의 항목 순회

3)available 속성을 갖는 열거형의 항목 순회

 

*순환열거형

열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 사용.

순환열거형을 명시하고 싶다면 indirect 키워드 사용.

특정 항목에만 한정 -> case 키워드 앞에 indirect붙인다

열거형 전체에 적용 -> enum 키워다 앞에 indirect 붙인다.

 

*비교 가능한 열거형

Comparable 프로토콜을 준수하는 연관 값만 갖거나

연관 값이 없는 열거형은 Comparable 프로토콜을 채택하면 각 케이스를 비교할 수 있다.

 

 

 

 

 

 

http://labs.brandi.co.kr/2021/09/01/kimjh3.html

 

https://soooprmx.com/enum/

 

enum 타입 사용법 정리 - Swift · Wireframe

Emumerations “열거”타입은 임의의 관계를 맺는 값들을 하나의 타입으로 묶어서 타입-안전한 방식으로 다룰 수 있게 해준다. C에서도 enum 키워드를 이용해서 열거체를 선언할 수 있었는데, C의 열

soooprmx.com

https://www.simpleswiftguide.com/how-to-use-switch-statement-with-enum-in-swift/

 

https://hanulyun.medium.com/swift-enum-allcases%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81-4cc0514d0f22 

 

(Swift) Enum AllCases를 활용한 리팩토링

Swift 5.1 기준

hanulyun.medium.com

CaseIterable & Conclusion

그래서 검색하다가 알게된 CaseIterable 프로토콜. AllCases를 얻을 수 있어요.

enum: CaseIterable { // 추가
  // static let allItems 는 지운다
}
func printDemoText(_ index: Int) {
  var demoText: String? // 로그 찍을 변수
  
  DemoFlag.allCases.forEach { // allCases를 가져올 수 있다.
    if $0.rawValue.index == index {
      demoText = $0.rawValue.text
    }
  print("text = \(demoText)")
}

 

출처: 야곰 swift 문법 책

 

'iOS > iOS Swift 문법' 카테고리의 다른 글

iOS swift 흐름제어  (0) 2022.07.16
iOS swift 연산자  (0) 2022.07.14
iOS swift <집단자료형> - 배열  (0) 2022.06.03
iOS swift 제어전달문 (4가지) / 구문레이블  (0) 2022.06.03
iOS swift switch구문  (0) 2022.06.03