1. 옵셔널 추출이란?
- 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것!
2. 옵셔널 방식
- 옵셔널 바인딩
- nil 체크 + 안전한 추출
- 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내온다
- if-let 방식 사용
// 테스트용 함수 printName
func printName(_ name: String) {
print(name)
}
// myName이라는 옵셔널 변수에 nil 할당
var myName: String? = nil
printName(myName)
컴파일 오류 발생
👉 printName 함수는 String 타입을 전달받으려 하지만 myName 옵셔널 변수는 nil이기 때문에 컴파일 오류가 발생!
if let name: String = myName {
printName(name)
} else {
print("myName == nil")
}
myName이 String일 경우에는 해당 값이 출력되고, 그렇지 않을 경우에는 myName == nil이 출력!
var yourName: String! = nil
if let name: String = yourName {
printName(name)
} else {
print("yourName = nil")
}
암시적 추출 옵셔널 변수(!)를 사용해서도 작성 가능하다
,를 사용해 한 번에 여러 옵셔널을 바인딩 할 수 있다
모든 옵셔널에 값이 있을 때에만 동작한다
myName = "jjudy"
yourName = nil
if let name = myName, let friend = yourName {
print("\(name) and \(friend)"
}
👉 yourName이 nil이기 때문에 실행되지 않는다
yourName = "hana"
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
}
jjudy and hana
- 강제 추출
옵셔널에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식이다
만약 값이 없을 경우(nil 일 경우) 런타임 오류가 발생하기 때문에 추천되지 않는다..
var myName: String? = jjudy
var yourName: String! = nil
printName(myName!)
jjudy
myName = nil
print(myName!)
👉 강제 추출시 값이 없으므로 런타임 오류 발생
yourName = nil
printName(yourName)
👉 nil 값이 전달되기 때문에 런타임 오류 발생
정리
1. 옵셔널 추출이란, 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것
2. 옵셔널 방식에는 두 가지가 있다
- 옵셔널 바인딩
- nil을 체크하는 안전한 추출 방식이다
- 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내온다
- if-let 방식을 사용한다
- 강제추출
- 옵셔널에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식이다
- 만약 값이 없을 경우 런타임 오류가 발생하기 때문에 추천되지 않는다
2022.02.23 - [Study/Swift_BoostCourse_Basic] - iOS 프로그래밍을 위한 스위프트 기초
iOS 프로그래밍을 위한 스위프트 기초
다음과 같이 연재되는 포스트는 부스트코스에서 야곰님의 'iOS 프로그래밍을 위한 스위프트 기초' 강좌를 수강한 후 작성한 기록입니다. 부스트코스에서 야곰님의 'iOS 프로그래밍을 위한 스위프
jjudy99.tistory.com
'[Non-Updated] iOS > Swift_BoostCourse_Basic' 카테고리의 다른 글
[Swift_BoostCourse_Basic] CH 2_13. 구조체 (0) | 2022.03.08 |
---|---|
[Swift_BoostCourse_Basic] CH 1_Quiz 1 (0) | 2022.03.08 |
[Swift_BoostCourse_Basic] CH 1_11. 옵셔널 (0) | 2022.03.03 |
[Swift_BoostCourse_Basic] CH 1_10. 반복문 (0) | 2022.03.02 |
[Swift_BoostCourse_Basic] CH 1_09. 조건문 (0) | 2022.02.25 |