enum SurpriseEnum {
let storeProperty = "저장프로퍼티인듯"
// Error! Enums must not contain stored properties
// 인스턴스 저장 프로퍼티는 인스턴스가 생성이 되어야 하는데,
// Enum은 인스턴스를 생성하지 못하는 특성이 있음.
}
enum SurpriseEnum {
static let storeProperty = "타입저장프로퍼티인듯"
}
enum SurpriseEnum: Int {
case one = 0
case two = 1
case three = 2
}
enum SurpriseEnum: String {
case one = "1"
case two = "2"
case three = "3"
}
// 자동으로 0,1,2가 들어감
enum SurpriseEnum: Int {
case one
case two
case three
}
// 앞에 rawValue를 설정하면 뒤에는 +1된 값들로 들어간다. 각각 5,6,7
enum SurpriseEnum: Int {
case one = 5
case two
case three
}
// 중간에 rawValue를 설정한 경우 각각 0,10,11 이런식으로 들어간다.
enum SurpriseEnum: Int {
case one
case two = 10
case three
}
// 각각 Hello, two, three
enum SurpriseEnum: String {
case one = "Hello"
case two
case three
}
enum SurpriseEnum: String, CaseIterable {
case one
case two
case three
}
let allCases = SurpriseEnum.allCases // 배열로 만들어줌
enum SurpriseEnum: Int {
case one = 0
case two = 0 // Error! Raw value for enum case is not unique
case three = 0 // Error! Raw value for enum case is not unique
}
switch SurpriseEnum.allCases[1] {
case .one: print("1")
case .two: print("2")
case .three: print("3")
}
다음과 같이 위치 정보에 관한 enum을 만들어보면, 아래와 같은 경고를 만날 수 있다.
switch status {
case .notDetermined:
print("notDetermined")
case .restricted:
print("restricted")
case .denied:
print("denied")
case .authorizedAlways:
print("authorizedAlways")
case .authorizedWhenInUse:
print("authorizedWhenInUse")
case .authorized:
print("authorized")
}
현재 버전에서는 enum이 저거밖에 없지만, 추후 업데이트가 되면서 새로운 권한이 생긴다면, 그때는 어떻게 처리를 할 것인가에 대해 묻고 있다. 다시 말해서 저렇게 짜도 문제는 없지만, 언젠가는 문제가 터질 수 있다는 경고. 아래와 같이 추가해준다면 문제가 없다.
switch status {
case .notDetermined:
print("notDetermined")
case .restricted:
print("restricted")
case .denied:
print("denied")
case .authorizedAlways:
print("authorizedAlways")
case .authorizedWhenInUse:
print("authorizedWhenInUse")
case .authorized:
print("authorized")
@unknown default:
print("잘 모르겠음")
}
귀찮고 만약 앞으로도 enum이 변경될일 없다면 enum앞에 frozen을 붙여봐라! @unknown default 같은 귀찮은 녀석들을 붙일 필요도 없고 컴파일 속도가 향상되는건 덤이다.
@frozen enum SurpriseEnum: Int {
case one
case two
case three
}