하루에 0.01%라도 성장하자

Develop/iOS

Swift 열거형 (enum)

뚠님 2019. 5. 8. 18:54
반응형

Swift

 

열거형은 대체로 다른언어에서 많이 사용되지 않지만, Swift에서는 많이 사용된다고 한다.

또한 Swift만의 특징이 있다고 한다!

 


 

enum Weekday { 
    case mon
    case tue
    case wed
    case thu, fri, sat, sun
}

var day : WeekDay = WeekDay.wed;
day = .tue;


// enum의 모든 요소를 구현하면 default가 필요 없다.
// 하나라도 빠지면 default가 필요하다 ( 컴파일러 에러 발생 )

switch day {
    case .mon :
    	print("mon");
    case .tue : 
    	print("tue");
    case WeekDay.fri :
        print("fri");
    case .wed, .thu, .sat, .sun :
        print("every");
}

 

enum을 통해 열거형을 생성 한다.

.mon 처럼 값을 접근할 수 있다.

switch문에서는 열거형에 나열된 요소들을 모드 case로 만들어 처리하면 default문이 필요가 없지만, 하나라도 빠지면 default를 넣어주어야 한다.

 


 

// 열거형의 원시 값

// Int형의 경우 제일 처음값 기준으로 1씩 증가한다.
enum Numbers : Int {
    case zero = 0 // 시작값 기준으로 아래로 1씩 증가한다.
    case one = 1 // 1로 명시하였지만 없어도 1이다.
    case two // 2의 값을 갖는다.
}

print("number : \(Numbers.zero.rawValue)"); // rawValue로 접근한다.

enum Name : String { 
    case ddunnim = "뚠님"
    case test = "테스트"
    case test2 // 아무 값도 없는 요소를 접근할 경우 요소의 이름을 값으로 갖는다.
}

print("출력 : \(Name.ddunnim.rawValue)"); // 출력 : 뚠님
print("출력 : \(Name.test2.rawValue)"); // 출력 : test2

 

열거형에도 데이터형을 넣을 수 있는데, 위처럼 Int로 넣으면 제일 최초값(저 코드에서는 zero)를 기준으로 아래로 1씩 증가된다.

따라서 two의 경우 별도로 값을 지정해 주지 않아도 2값을 갖는다.

 

String은 어떤값이 올지 모르기 때문에 초기값을 지정해 주지 않으면 case 값 그대로 출력된다. (코드에서는 test2)

 

사용법은 열거형명.요소명.rawValue다.

 


 

let number : Numbers? = Numbers(rawValue : 0); // 상수(변수)에 값을 할당 할 때는 옵셔널 형태로 전달한다. (rawValue가 있을수도 있고 없을수도 있기 때문에 )

if let tempNumber : Numbers = Numbers(rawValue : 5 ){
    print("\(tempNumber) 출력 ");
} else {
	print("없음");
}

//열거형의 메소드
enum EnumFunc {
    case one, two 
   
    func printMessage(){ // 메소드를 생성한다.
    	switch self {
        case one :
        	print("One");
        case two :
        	print("Two");
        }
    }
}

EnumFunc.one.printMessage(); // One이 출력된다.

 

열거형에도 메소드를 생성할 수 있다.

( 아직은 사용할 일이 있을까 싶긴 한데.. 우선 배웟으니 기록한다. )

 

방법은 크게 어렵지 않기 때문에 코드를 내용만으로도 파악이 가능하다.

반응형

'Develop > iOS' 카테고리의 다른 글

Swift 프로퍼티 (Property)  (0) 2019.05.09
Swift 클래스 와 구조체 ( Reference and Value )  (0) 2019.05.09
Swift 구조체 (Struct)  (0) 2019.05.08
Swift 옵셔널(Optional)  (0) 2019.05.08
Swift 반복문  (0) 2019.05.08