enum(열거형)
열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입
열거형은 배열이나 딕셔너리 같은 타입과 다르게 프로그래머가 정의해준 항목 값 외에는 추가/ 수정이 불가능
* switch 구문과 함께 사용할때 유용하게 사용할 수 있습니다.
열거형을 사용하는 경우
- 제한된 선택지를 주고 싶을때
- 정해진 값 외에는 입력받고 싶지 않을때
- 예상된 입력 값이 한정되어 있을때
기본선언
enum School{case primary
case elementary
case middle
case high
case college
case university
case graduate
}
또는 "," 를 이용해 한줄로 표현
enum School {
case primary, elementary, middle, high, college, university, graduate
}
열거형 변수의 생성 및 값 변경
var types : School = School.primaryvar typeName : School = .graduate
typename = .elementary
열거형의 원시 값(Raw Value) 지정과 사용
case primary = "유치원"
}
let schoolNameText = Schooltype.primary
print("저의 학교는 \(schoolNameText.rawValue) 입니다") // "저의 학교는 유치원 입니다."
열거형의 원시 값 일부 지정 및 자동 처리
일부 항목만 원시 값을 적용 시 나머지 값은 스위프트에서 알아서 자동처리
enum Numbers : Int{
case zero
case one
case two
case ten = 10
}
print(Numbers.zero.rawValue) // 0
print(Numbers.ten.rawValue) // 10
열거형 초기화
원시 값 정보를 알 경우 원시 값을 통해 열거형 변수 또는 상수를 생성, 올바르지 않는 원시 값을 통해 생성하려고 하면 nil 반환
enum Numbers : Int{
case zero
case one
case two
case ten = 10
}
let newNumber = Numbers(rawValue : 0) // zero
var noneNumber = Numbers(rawValue : 4) // nil
연관 값
case pasta(taste : String)
case pizza(dough : String, topping : String)
}
var dinner : MainDish = MainDish.pasta(taste: "크림") // pasta("크림")
dinner = .pizza(dough: "치즈크러스트", topping: "불고기") // pizza(dough: "치즈크러스트", topping: "불고기")
*순환열거형
indirect 키워드 사용
- 특정 항목에 순환 열거형 항목 명시
case 키워드 앞에
enum AriExpression{
case number (Int)
indirect case add (AriExpression, AriExpression)
}
- 열거형 전체에 순환 열거형 명시
enum 키워드 앞에
indirect enum AriExpression{
case number (Int)
case add (AriExpression, AriExpression)
}
출처 : 야곰님의 스위프트 프로그래밍
댓글 없음:
댓글 쓰기