Swift랑 친해지기/Swift문법정리

12. 옵셔널 추출

데브킹덕 2021. 12. 22. 15:36

1. 옵셔널 추출(Optional Unwrapping)이란

- 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것

메모리 안에 42라는 Int값이 저장이 되어 있다. 옵셔널을 값을 보호하는 보호막이 있다고 생각하자

Int? 에 값이 있는지 없는지 물어보고 있으면 값을 꺼내오는거라고 생각하자

2. 옵셔널 방식

    1.  Optional Binding 

        - nil 체크 + 안전한 추출

       - 옵셔널의 값을 꺼내오는 방법 중 하나

    2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옴

 

    3. if - let 방식 사용

 

코드로 보기

 

func printName(_name: String){
   print(name)
}

var myName: String? = nil

//printName(myName)
// 전달되는 값의 타입이 다르기 떄문에 컴파일 오류 발생

그래서 if-let 방식을 통해서 바인딩 가능 

if let name: String = myName{
   printName(name)
}else{
   print("myName == nil")
}

var yourName: String! = nil         --> 암시적 추출형식으로 값을 꺼내올 수 있음

if let name: String = yourName{
  printName(name)
}else{
   print("yourName == nil")
}

// name 상수는 if-let 구문 내에서만 사용가능합니다
// 상수 사용범위를 벗어났기 때문에 컴파일 오류 발생
// printName(name)

// ,를 사용해 한번에 여러 옵셔널을 바인딜 할 수 있습니다 .
// 모든 옵셔널에 값이 있을떄만 동작합니다.
myName = "GD"
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)")
}
// GD and hana

4. Force Unwrapping

옵셔널의 값을 강제로 추출

 

*강제추출 : 옵셔널에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식,

만약 값이 없을 경우 (nil) 런타임 오류가 발생하기 때문에 추천되지 않습니다.

 

var myName: String? = GD

var youName: String! = nil

 

printName(myName!)// GD          --------> !를 붙이게 되면 옵셔널타입 안에 값을 강제로 추출한다

myName = nil
 

//print(myName!)

//강제추출시 값이 없으므로 런타임 오류 발생

 

yourName = nil

 

//printName(yourName)

// nil 값이 전달되기 때문에 런타임 오류발생

 

'Swift랑 친해지기 > Swift문법정리' 카테고리의 다른 글

13.구조체  (2) 2022.01.05
13. 구조체  (0) 2021.12.22
11.옵셔널  (0) 2021.12.22
10. 반복문  (0) 2021.12.21
09. 조건문  (0) 2021.12.21