12. 옵셔널 추출
옵셔널 추출 방법
Optional Binding
옵셔널 값을 꺼내오는 방법 중 하나로 nil 체크와 더불어 안전한 값을 추출한다.
옵셔널 바인딩은 예를 들어, 정수가 상자 안에 있을 때, 상자에 값을 물어보는 방식이다.
func printName(_ name: String) {
print(name)
}
var myName: String? = nil
printName(myName) // 전달하는 값의 타입이 다르기 때문에 컴파일 오류가 발생한다.
위의 코드와 같은 문제를 해결하기 위해 if-let 구조를 활용한다.
func printName(_ name: String) {
print(name)
}
var myName: String! = nil
if let name: String = myName {
printName(name)
} else {
print("myName == nil")
}
name 상수는 if-let 구문 내에서만 사용할 수 있다.
printName(name)
위 코드는 상수 사용범위를 벗어났기 때문에 컴파일 오류가 발생한다.
또한 한 번에 하나의 상수만 바인딩할 수 있는 것이 아닌, 한 번에 여러개의 상수를 바인딩할 수 있다.
var myName: String? = "fuyukawa"
var yourName: String? = 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)")
}
// fuyukawa and hana
Force Unwrapping - 옵셔널 값을 강제로 추출
보호막을 강제로 깨부시고 가져온다고 생각하면 쉽다
func printName(_ name: String) {
print(name)
}
var myName: String? = "fuyukawa"
printName(myName!) // fuyukawa
위의 예시처럼 파라미터 뒤에 !(느낌표)를 붙이게 되면 값을 강제로 추출한다.
myName = nil
print(myName!)
다만, 이 경우 nil을 할당하게 되면 값이 없기 때문에 런타임 오류가 발생한다.
var yourName: String! = nil
printName(yourName)
암시적 추출 경우 처음에 선언할 때부터 파라미터 뒤에 !(느낌표)가 붙어 있다고 가정하기 때문에 printName에서 느낌표를 안 붙여도 런타임 오류가 발생한다.
그렇기에 강제추출법은 선호되지 않는다.
©️NAVER Boostcourse. All Rights Reserved.
'앱 개발 > IOS' 카테고리의 다른 글
[IOS 프로그래밍을 위한 스위프트 기초] Quiz 1-2 스위프트 기본 데이터타입 퀴즈 (0) | 2024.03.01 |
---|---|
[IOS 프로그래밍을 위한 스위프트 기초] Quiz 1-1 스위프트 기초개념 퀴즈 (0) | 2024.03.01 |
[IOS 프로그래밍을 위한 스위프트 기초] 1단원 11. 옵셔널 (0) | 2024.03.01 |
[IOS 프로그래밍을 위한 스위프트 기초] 1단원 10. 반복문 (0) | 2024.02.29 |
[IOS 프로그래밍을 위한 스위프트 기초] 1단원 09. 조건문 (0) | 2024.02.29 |