옵셔널
옵셔널에 대한 7가지 개념
- force unwrapping
- optional binding - if
- optional binding - guard
- nil coalescing
- optional chaining
- implicitly unwrapped optional
- optional pattern
옵셔널 바인딩
옵셔널 바인딩은, "선택적 결합"으로 "옵셔널을 열어봤는데 값이 들어있으면 이 변수에 할당한다"로 해석
옵셔널을 깠는데 nil일 경우 guard let은 else이 꼭 필요하고 else로 감, if let은 else가 꼭 필요없고 else가 있으면 else로 감
옵셔널을 안전하게 처리하는 방법입니다. → 옵셔널 값은 랩에 쌓여있어 사용시 언래핑 과정이 필요
- if문, while문, guard문에서 사용
if-else 구문
var pocketMoney: Int? = 300 // 옵셔널 변수
if let unwrappedPocketMoney = pocketMoney { // (A)
pocketMoney = unwrappedPocketMoney + 100 // (B)
} else {
print("pocketMoney가 nil이면 이 문구가 출력된다.") // (C)
pocketMoney = 100
}
-
(A)의 pocketMoney(옵셔널 변수)
-
nil일 경우
else문안의 (C)코드가 실행
-
nil이 아닐 경우
옵셔널 열어봤는데 nil이 아니므로 unwrappedPocketMoney 변수에 할당된다.
그 후, (B) 코드가 실행된다.이때, unwrappedPocketMoney 변수는 If문 내부의 스코프에서만 사용이 가능
if문밖의 스코프에선 unwrappedPocketMoney 존재하지 않는다.
-
-
하나의 if문에 여러개의 옵셔널 바인딩을 할 수 있다.
- 쉼표는 AND(&&) 연산자와 같이 작용
- 하나의 옵셔널 바인딩이 nil일 경우 if문 내부코드는 실행안됨
-
if는 else가 반드시 필요하진 않음.
guard 구문
func downloadImage (from url: URL?) {
guard let url = url else {
print("url is nil. url not found!")
return
}
print("url is not wrapped with optional here: \(url)"
beginDownload(url: url)
}
- guard-else는 한쌍이다.
- else문 안에서는 항상 함수를 종료시켜야한다.
- 옵셔널 바인딩을 통해 초기화된 옵셔널의 값은 옵셔널이 아닌 일반 타입의 값으로 해당 함수의 스코프 내 어디에서든 사용이 가능해진다.
- 이는 함수 내부의 옵셔널에 값이 들어있지 않을때는 함수를 일찍 종료하고 나머지 코드를 실행하지 않게 만들어준다.
- 역시 한번에 여러개를 처리 가능
- 다른 조건문과 함께 섞어서 사용 가능
- 옵셔널 바인딩에만 한정된게 아니라 일반적인 조건문과도 사용 가능
Author And Source
이 문제에 관하여(옵셔널), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hayeon/옵셔널저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)