티스토리 뷰
[시작]
- Swift의 특성 중 Safe를 문법으로 담보하는 기능
- 옵셔널 : 값이 있을 수도 있고 없을 수도 있다
- 옵셔널인 값과 옵셔널이 아닌 값은 서로 다른 타입
[옵셔널 사용]
- NULL == nil, 완벽하게 같은 표현
- 옵셔널 변수(상수)가 아니면 nil을 할당할 수 없음
: 해당 변수(상수)에는 값이 없을 수 있다 -> nil일 가능성이 있으므로 사용에 주의하라
: nil에 강제 접근하면 런타임 오류 발생
- 타입명 뒤에 물음표(?)를 붙임으로서 해당 변수(상수)가 옵셔널 변수(상수)임을 알림
: Optional<[타입명]>이라고 쓸 수도 있음
- 옵셔널은 열거형으로 구현되어 있음
1 2 3 4 | public enum Optinal<Wrapped> : ExpressibleByNilLiteral{ case none case some(Wrapped) } | cs |
옵셔널은 제네릭이 적용된 열거형
값을 가지면 some(Wrapped), nil이면 none으로 가서 처리
-> 값이 옵셔널이라는 열거형의 방패막에 보호되어 래핑되어 있는 모습
- 열거형이므로 switch문을 통해 값이 있는지 확인할 수 있음
: 일반적으로 switch문을 통해서 옵셔널 변수의 값 유무를 확인하지는 않음
[옵셔널 추출 - 강제 추출]
- 옵셔널 값의 뒤에 느낌표(!)를 붙이면 값을 강제로 추출하여 반환
- 이 경우 옵셔널에 값이 없다면 런타임 오류
- 매우 위험함, 지양해야 할 방법
[옵셔널 추출 - 옵셔널 바인딩]
- if문과 값 바인딩을 사용하여 옵셔널 값을 안전하게 추출
- 바인딩된 변수는 해당 블록 안에서 사용 가능
1 2 3 4 5 6 7 | let string: String? = nil if let value = string{ print(value) } else{ print("NOOOO") } | cs |
위의 코드는 옵셔널 상수 string을 옵셔널 바인딩을 통하여 값을 추출함, if문 내에서 바인딩한 상수 value를 사용할 수 있음
- 여러 옵셔널의 값을 바인딩할 수 있음, 이 경우 하나라도 nil이면 해당 스코프는 실행되지 않음
[옵셔널 추출 - 암시적 추출 옵셔널]
- 때때로 nil을 할당하고 싶지만 옵셔널 바인딩으로 매번 값을 추출하기 귀찮거나 로직상 nil 때문에 오류가 발생하지 않을 것 같다는 확신이 들 때 사용
- 옵셔널 상수(변수)의 타입명 뒤에 물음표가 아닌 느낌표를 붙임
- 옵셔널 바인딩이나 강제 추출을 사용하지 않아도 일반 값을 사용하는 것처럼 코드 작성 가능
- nil이 할당되어 있으면 해당 변수를 추출할 때 오류 발생
- 이 또한 지양
'Swift > 야곰의 스위프트' 카테고리의 다른 글
10장 프로퍼티와 메서드 (0) | 2018.02.03 |
---|---|
9장 구조체와 클래스 (0) | 2018.02.03 |
7장 함수 (0) | 2018.01.29 |
6장 흐름 제어 (0) | 2018.01.29 |
5장 연산자 (0) | 2018.01.29 |