iOS/Swift
[iOS] Swift - enum (2)
듀IT
2021. 11. 20. 01:04
enum(1): https://dew-it.tistory.com/59
Associated Values (연관 값)
Swift의 enum 객체의 멤버와 각 값은 객체 선언 시점에 정의된다. 즉 컴파일 시점에 enum 멤버의 정의와 값이 고정된다.
그렇지만 값을 사용하는 시점, 즉 런타임 시점에 보조값을 할당할 수도 있다. 이러한 보조값을 Associated Values라고 부른다.
enum ImageFormat {
case JPEG
case PNG (Bool)
case GIF(Int, Bool)
}
var newImage = ImageFormat.PNG(true)
newImage = .GIF(256, false)
이미지 포맷 중 png는 투명값을 설정할 수도 있고 하지 않을 수도 있다. 이때 bool 타입을 통해 투명한 png인지, 불투명한 png인지 보조값을 설정할 수 있다. 마찬가지로 GIF도 사용된 컬러의 수, 애니메이션 여부를 설정할 수 있다.
이러한 세부적인 요소를 연관값을 이용하여 구분할 수 있으며, 런타임 중 값을 저장해야할 필요가 있을 때 사용할 수 있다.
프로퍼티 & 메소드
enum은 인스턴스를 생성할 수 없지만, 인스턴스처럼 멤버를 사용할 수 있어서 인스턴스 프로퍼티와 메소드, 그리고 타입 프로퍼티와 메소드를 정의할 수 있다.
enum Week : Int {
case monday = 1
case tuesday = 2
case wednesday = 3
case thursday = 4
case friday = 5
case saturday = 6
case sunday = 0
var value: String { // computed propery
return "오늘은 \(self.rawValue)."
}
func getDescription() -> String { // 인스턴스 메소드
switch self {
case .monday:
"주말이 끝났습니다. 한주의 시작입니다."
case.tuesday:
"화요일은 월요일보다 더 힘듭니다."
case.wednesday:
"한주의 절반이 지나고 있습니다. 힘내세요."
case.thursday:
"오늘만 지나면 불금입니다. 힘내세요"
case.friday:
"드디어 불금입니다."
case.saturday:
"행복한 토요일입니다."
case.sunday:
"아쉬운 주말 마지막 날입니다."
}
}
static func getName() -> String { // 타입 메소드
return "이 enum의 이름은 Week입니다."
}
}
computed property와 인스턴스 메소드, 그리고 static 키워드를 이용하여 타입 메소드를 정의할 수 있다.
var day = Week.friday
print(day.value) // 오늘은 5.
print(day.getDescription()) // 드디어 불금입니다.
print(Week.getName()) //이 enum의 이름은 Week입니다.