본문 바로가기
iOS

[앨런 swift 문법 마스터 스쿨] 열거형, 옵셔널 타입, 옵셔널 열거형

by 23g 2024. 7. 20.

0.

횟아 다니면서 진도 따라가기 쉽지 않군뇨,,,

열시미 해보겠읍니다.

 

지난번 포스팅에서 컬랙션( ~set) 까지 하였으니

오늘은 열거형 복습 !

 

1. 

열거형( Enum )

custom type : 개발자가 마음대로 만들어서 쓸 수 있는 사용자 정의 타입

- Enum : 열거형

- Class : 클래스

- Struct : 구조체

 

//기본 열거형

enum Typename { //대문자로 시작
	case type1 //케이스 이름은 소문자로 시작
    case type2
    case type3
}

//사용
var x: Typename = Typename.type1
var x: Typename = .type1

//원시값을 가진 열거형
enum Typename:Int { //Int or String -> Int는 숫자가 매칭, String은 문자가 매칭
										//문자는 모든 케이스에 매칭해야 사용 가능
	case type1 //케이스 이름은 소문자로 시작
    case type2
    case type3
}

//원시값 사용
var x: Typename? = Typename(rawvaule: 0) //type1
var x: Typename = Typename(rawvaule: 0)! // type1


//연관값을 가진 열거형

enum Apple { 
	case phone(name: String, ver: Int) 
    case pad(String, Int)
}

//연관값 사용
var myPphone: Apple = Apple.phone(name:iphone, ver: 14)
var myPad: Apple = Apple.pad( Ipad, 3)

 

연관값과 원시값을 동시에 사용하는 것은 불가능하다!

 

옵셔널 타입

옵셔널 타입은 내부적으로 열거형으로 이루어져 있음

연관값이 들어있는 some과 값이 없음을 나타내는 none

 

-none과 nil은 완전히 동일하다!

 

열거형과 switch 타입

- 열거형은 switch문으로 처리한다

스위치문은 표현식에 대한 분기 처리에 최적화 되어있기 때문!

 

옵셔널 열거형

옵셔널 자체가 열거형으로 선언되어 있고, 옵셔널 열거형으로 선언되는 경우 열거형의 열거형이다

 

옵셔널에 연관값이 있는 경우

- 옵셔널 case 패턴

: 케이스 내부에 구체적인 값이 들어가 있고 그것을 활용하기 위해서 변수에 바인딩해서 사용하는 패턴

case .cpu(core: let 변수이름)

 

옵셔널 패턴

//표현식이 옵셔널 타입인 경우
case .some(let x): 은 case let x?과 동일하다

//열거형 case 패턴 : 열거형 내부 연괍값을 바인딩해서 사용
if case .some(let x) = optionalVaule{
	print(x)
}

//옵셔널 패턴 : 옵셔널 값을 직접 받아서 .some을 생략하는 패턴
if case let x? = optionalVaule{
	print(x)
}

//위 두 경우는 동일한 것임!

 

@unknown 패턴

: switch문에서 모든 케이스를 다루지 않은 경우 경고로 알려주는 유용한 기능!

switch userLogin{
case .email: print("이메일 로그인")
case .google: print("구글 로그인")
@unknown default:
	print("etc)
}

 

 

2.

흠,,, 이해가 된듯 안된듯 ㅎ

어렵다!

하지만 직접 사용하다 보면 익숙해지지 않을까?!