Swift에서 Enum을 다른 값으로 치환하여 사용하기

Swift에서 Enum을 다른 값으로 치환하여 사용하기


아래는 Int를 대상으로 예시한 것이다.


enum MyEnum {
  case One
  case Two
  case Three
  case Four
}

이와 같이 선언하고, 아래처럼 사용하면 오류가 발생한다.
(주의! Xcode 6.0과 Xcode 6.1은 사용 방법이 서로 다르다.)

var error_case1_enum = MyEnum(2) => 오류: Cannot convert the expression's type '$T7??' to type '()'
var error_case2_enum = MyEnum(rawValue: 2) => Xcode 6.1의 사용법으로 대응한 경우. 오류: Extra argument 'rawValue' in call
var error_case2_enum = MyEnum.fromRaw(2) => Xcode 6.0의 사용법으로 대응한 경우. 오류: Static method 'fromRaw' has been replace with a failable initializer 'init(rawValue:')' <= 이 경우는 Xcode 6.1인 경우에 출력하는 오류

위 오류에 대한 수정를 아래와 같이 차근차근 해보자.

첫번째 이유는, MyEnum(2) 의 인자에 대한 초기화 대응 함수가 생성되지 않아 type error가 발생할 수 밖에 없기 때문이다.

우선 초기값이 필요하다면 초기값을 넣어준다.(반드시 필요한 행위는 아니다. 필요에 따라서)

enum MyEnum {
  case One
  case Two
  case Three
  case Four

  init() {
    self = .One
  }
}

<실제 여기서 부터 시작하면 된다.>

다음으로, 변환을 허용할 type을 지정한다.
enum MyEnum: Int {
  case One = 1 // 시작 값을 지정한다. 이는 선택사항이다.
  case Two
  case Three
  case Four

  init() {
    self = .One
  }
}

마지막으로 치환을 허용할 초기화 함수를 선언해준다.

enum MyEnum: Int {
  case One = 1
  case Two
  case Three
  case Four

  init(rawValue: Int) {
    self = MyEnum(rawValue: rawValue) // Xcode 6.1인 경우
    self = MyEnum.fromRraw(rawValue) // Xcode 6.0인 경우
  }

  init() {
    self = .One
  }
}

사용할 때는,

var case_xcode61_enum: MyEnum = MyEnum(rawValue: 2) // Xcode 6.1
var case_xcode61_int: Int = MyEnum.rawValue

var case_xcode60_enum: MyEnum = MyEnum.fromRaw(2) // Xcode 6.0
var case_xcode60_int: Int = MyEnum.toRaw()

댓글

이 블로그의 인기 게시물

Next.js에서 자연스러운 Page Transition 방법

[flutter] Android - Package간 sdk version 등이 맞지 않아 오류가 발생하는 경우

[Windows] Chocolatey upgrade