반응형
Optionals 이란?
- "값이 없음"을 표현하는 옵셔널
- nil
Optional type
- nil을 사용할 수 있는 타입과 사용할 수 없는 타입을 구분하고, 사용할 수 있는 타입을 가리켜 옵셔널 타입이라고 부른다
- 자료형 뒤에 ? 를 붙여 옵셔널 타입으로 만든다
Non - optional Type
- 무조건 값을 가져야한다.
let str: String = "Non-optional Type"
let optionalStr: String? = nil
Optional Unwrapping (Forced Unwrapping)
- Optional Unwrapping을 이용하면 옵셔널타입을 논옵셔널 타입으로 변환 할 수 있다
- Optional Unwrapping을 사용할려면 절대 Optional Unwrapping을 하고자하는 상(변)수에 nil 이어서는 안된다
- ! 를 붙여 옵셔널 언래핑을 한다
var str: String? = "Unwrapping"
print(str) //Optional("Unwrapping")
print(str!) //Unwrapping
food = nil
//print(str!) //런타임 오류 발생!!!
Optional Binding
- 옵셔널 언래핑을 하는 방법 중 하나
- 강제 추출(Forced Unwrapping) 방법이 있지만 이는 nil이 들어 있어도 강제로 해제해버리는 특성 때문에 값 100프로 있다고 확신할 수 있는 경우를 제외하곤 사용을 지양해야한다. -> 코드에서 발생하는 옵셔널 에러의 대부분을 피할 수 있음(옵셔널 바인딩 사용시)
- 조건문과 달리, 옵셔널표현식을 평가하고 값이 저장되어있으면 언래핑 후 값을 저장
if let name: Type = OptionalExpression {
statements
}
while let name: Type = OptionalExpression {
statements
}
guard let name: Type = OptionalExpression {
statements
}
if let
- 단순히 옵셔널 처리 값에 대한 피드백만 주고 싶을 때
- 값 있으면 이렇게 처리하고 nil 이면 저렇게 처리해!
guard let
- 옵셔널 처리 값이 nil인 경우 무조건 함수의 실행을 종료 시킬 때
- 너 값 없니? 그럼 내 함수에서 나가
Implicitly Unwrapped Optionals- IUO (묵시적 옵셔널 추출)
- ! 사용
- 값을 추출하는 방법은 강제추출이랑 똑같다. 문제점도 고로 똑같기 때문에 조심해야한다
var num: Int! = 4
var num2: Int = num
Nil-Coalescing Operator
- Optional String Type ?? Non-Optional String Type
- 삼항연산자와 비슷한 모양새
Optional Chaining
- ?.
- 옵셔널 바인딩하고 비슷한 느낌으로 옵셔널을 확인해가면서 추출한다고 볼 수 있지만 옵셔널 체이닝은 옵셔널 바인딩하고 다르게 코드를 매우 간결하게 작성할 수 있다
- 체인의 형태처럼 연쇄적으로 옵셔널에 접근
if let my_email = my?.contacts.email {
print("I have a email : \(my_email)")
}
반응형
'iOS > Swift' 카테고리의 다른 글
[Swift] Concurrency [2] (0) | 2023.10.25 |
---|---|
[Swift] Concurrency [1] (1) | 2023.10.23 |
[Swift] Protocol 프로토콜 [2] (0) | 2023.10.16 |
[Swift] Protocol 프로토콜 [1] (0) | 2023.09.01 |
[Swift] struct, class, enum (0) | 2023.08.31 |