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를 주로 사용함
2-1)컴파일러에 의한 자동 해제
- 옵셔널값은 비교연산자를 통해 다른값과 비교하면 옵셔널 값을 해제함
하지만 옵셔널 제거 범위는 비교연산할때만 이고 블록이 실행되면 옵셔널타입인 것을 볼 수 있음
2-2)옵셔널의 묵시적 해제 (IUO)
- 옵셔널 타입이지만 값을 사용할때 자동으로 옵셔널이 해제됨
- string을 Int형으로 형변환해주는데 값이 있을지 없을지 모르기때문에 stringToInt는 Int? 옵셔널타입이어야함
- 근데 stringToInt에 연산을하고 싶으면 ? 에서 !로 바꿔주면 묵시적 해제가 가능해짐
- 아래와 같이 타입은 옵셔널 타입이지만 연산할때는 옵셔널이 제거 되는 것을 볼 수 있음
- IBOutlet 과 API에서 IUO를 리턴하는 경우 외에는 거~~~~~의 쓸 일 없음