swift-5 열거형

영점·2022년 9월 14일
0

Swift_Study

목록 보기
5/12

스터디를 진행하며 처음부터 다시 Swift를 공부하고 있습니다.
오늘 작성할 파트는 열거형 입니다.

원래 하기로 한 양보다 조금 더 나가고 있는듯하나..
열거형 / 함수 / 클로저 / 옵셔널은 너무 중요하고 난이도도 좀 있다고 생각해서
열거형과 옵셔널 파트를 먼저 공부하게 되었습니다.

선택지가 있을 때 사용하면 제일 유용한 열거형~

형태

enum CompassPoint {
    case north
    case south
    case east
    case west
}

//or

enum Planet {
    case north, south, east, west
}

형태는 이렇게 enum-case 형태입니다. 사용은 이렇게 합니다.

var directionToHead = CompassPoint.west

directionToHead = .east //directionToHead 의 타입은 이미 알고 있으므로 값을 설정할 때 타입을 삭제할 수 있습니다.

원시 값이 있는 열거형

기존에 적은 형태는 원시 값이 없는 열거형이었습니다.
이번에는 원시 값이 있는 열거형에 대해 알아보도록 하겠습니다.

enum number : Int {
  case zero //0
	case one //1
  case two //2
  case three //3
}

Int를 enum 선언 시 이름 옆에 명시해주면, 먼저 선언된 case부터 0부터 1씩 증가된 값이 들어갑니다.

RawValue를 직접 지정할 수도 있습니다. 지정하지 않았다면 바로 이전 case에서 +1한 값으로 지정됩니다.

enum number : Int {
  case zero = 0 //0
	case one //1
  case two = 4 //4
  case three //5
}

String은 Character와 다르게 Raw Value를 지정하지 않으면, case 이름과 동일한 Raw Value가 자동으로 만들어집니다.

enum number : String {
  case zero //zero
	case one = "dot" //dot
  case two //two
  case three //three
}

하지만 Int, String을 제외한 Double, Character 같은 타입은 무조건 RawValue를 지정해줘야합니다.

지정해주지 않으면 정수값이 아니라 실수값이라 컴파일러가 알아서 못더해주니 에러가 나게 됩니다.

따라서, Int형이 아닌 Number 자료형을 사용할 경우,

Raw Value를 생략하고 싶다면, 바로 이전 case의 Raw Value를 정수 값으로 해주어야 합니다.

enum number : Double {
  case zero = 1.0 //1.0
	case one = 2.0 //2.0
  case two = 3 //3.0
  case three //4.0
}

하지만 Character 같은 경우는 무조건 모두 Raw Value를 지정해 주어야합니다.

앞에서 A를 적었다고 다음에 +1을 했으니 B가 된다는 생각은.. 🙅‍♀️

원시값이 있는 열거형은 rawValue를 이용하여 접근합니다.

enum number : Int {
  case zero //0
	case one //1
  case two //2
  case three //3
}

let num = number.zero.rawValue //0
let num2 = number(rawValue : 2) //two

만약 init에 없는 Raw Value 값을 대입하면 nil을 반환합니다 ( 옵셔널 타입 )

let test = number.init(rawValue: 3) //three
let test = number.init(rawValue: 4) //nil

Switch-case와 enum

switch구문은 열거형 케이스를 고려할 때 완벽해야 합니다.
만약 case가 생략된다면 코드는 컴파일 되지 않습니다.

허나 만약 모든 열거형 케이스에 대해 case를 제공하는 것이 적절하지 않은 경우 명시적으로

해결되지 않은 사례를 포함하는 default를 사용합니다.

let somePlanet = Planet.earth
switch somePlanet {
case .earth:
    print("Mostly harmless")
default:
    print("Not a safe place for humans")
}
// Prints "Mostly harmless"
profile
일단 배운내용은 적어두기

0개의 댓글