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

[Swift] 옵셔널 해제 간단 정리

데브킹덕 2022. 9. 17. 18:27

옵셔널 해제 2가지 

1. 명시적 해제

  • 강제 해제 
  • 비강제 해제 (옵셔널 바인딩)

2. 묵시적 해제

  • 컴파일러에 의한 자동 해제
  • 옵셔널의 묵시적 해제

 

1-1) 강제 해제 

- 변수 뒤에 ! 

- 만약 !로 옵셔널 해제한 변수에 값이 없을 경우 crash 발생함 

- 최대한 쓰지말것

1-2) 옵셔널 바인딩

- if ,guard 문으로 안전하게 제거 할 수 있음

-메커니즘-

 =을 기준으로 우측 (Optional Expression)을 평가한뒤

값이 리턴이 되면 좌측 numbers (임시상수)에 저장이 됨  

 

차이점은 if문은 옵셔널을 제거한 상수나 변수를 if문블록 안에서만 사용가능하지만, 

guard문은 함수내부에서도 사용가능

그래서 guard를 주로 사용함

if문을 이용한 옵셔널 바인딩
guard문을 사용한 옵셔널 바인딩

2-1)컴파일러에 의한 자동 해제

- 옵셔널값은 비교연산자를 통해 다른값과 비교하면 옵셔널 값을 해제함

하지만 옵셔널 제거 범위는 비교연산할때만 이고 블록이 실행되면 옵셔널타입인 것을 볼 수 있음 

 

2-2)옵셔널의 묵시적 해제 (IUO)

- 옵셔널 타입이지만 값을 사용할때 자동으로 옵셔널이 해제됨

- string을 Int형으로 형변환해주는데 값이 있을지 없을지 모르기때문에 stringToInt는 Int? 옵셔널타입이어야함

- 근데 stringToInt에 연산을하고 싶으면 ? 에서 !로 바꿔주면 묵시적 해제가 가능해짐

- 아래와 같이 타입은 옵셔널 타입이지만 연산할때는 옵셔널이 제거 되는 것을 볼 수 있음

- IBOutlet 과 API에서 IUO를 리턴하는 경우 외에는 거~~~~~의 쓸 일 없음