swift-6 옵셔널

영점·2022년 9월 14일
0

Swift_Study

목록 보기
6/12

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

정말 옵셔널은 스위프트의 꽃이라 생각합니다.
하지만 그만큼 이해하는게 좀 힘든거 같기도 하고..

옵셔널 기본 타입

기존에 우리가 선언했었던 타입은 다 non-Optional Type입니다.

해당 타입은 무조건 값이 존재해야 합니다.

nil 이라는 값을 가질 수 있으면 Optional Type이고,

이 Optional Type을 선언할 땐 타입 옆에 ?를 붙입니다.

let age : Int? = 19
print("내 나이는 \(age)살 입니다.") //내 나이는 Optional(19)살 입니다.

옵셔널 중에 타입 옆에 ?가 아니라 !를 붙이는 옵셔널 묵시적 추출도 있습니다.
하지만 API에서 IUO를 return 한 경우를 제외하면 어쨌든 IUO도 강제 추출이기 때문에
사용하지 않는 것을 권장합니다.

옵셔널 언래핑 ( 강제 추출 )

코딩테스트때는 그래도 값이 지정되어 있다면야 써도 되겠지만 아니라면 그냥 쓰지 않는게 낫습니다.

컴파일 에러로 알려주면 다행이지만.. 개발하고 빌드했을 때 런타임 에러가 나면 얼마나 서럽겠습니까..🥲

옵셔널 언래핑은 nil을 언래핑 할 수 없는데 강제 추출은 “값이 있건 없건 알바야? 그냥 풀어!”

이런 느낌이기 때문에 추천하지 않습니다.

let age : Int? = 19
print("내 나이는 \(age!)살 입니다.") //내 나이는 19살 입니다.

옵셔널 언래핑 ( 옵셔널 바인딩 )

if-let, while-let, guard-let을 사용하여 옵셔널을 안전하게 언래핑 할 수 있습니다.

예시에서 표현식이 nil인지 여부를 판단하고 nil이 아닌 경우 Unwrapping 한 값을 대입합니다.

let age : Int? = 19

if let optionalAge = age { //optionalAge는 Int, age는 Int? 타입
    print(optionalAge) //19
} else {
    print(age) //Optional(19)
}

optionalAge의 값이 nil이 아닌 경우, optionalAge을 Unwrapping 한 값을 age에 대입하므로 19입니다.

let empty : Int? = nil

guard let optionalAge = empty else { return }
print(optionalAge)
종류if-letguard-let
바인딩된 상수의 scopeif문 안에서만 사용 가능guard문 밖에서만 사용 가능
사용단순히 옵셔널 처리 값에 대한 피드백만 주고 싶을 때옵셔널 처리 값이 nil인 경우 무조건 함수의 실행을 종료 시킬 때
profile
일단 배운내용은 적어두기

0개의 댓글