[iOS의 Swift] 옵셔널 바인딩  Optional binding
IT/Swift

[iOS의 Swift] 옵셔널 바인딩 Optional binding

옵셔널 바인딩은 크게 1. 명시적 해제 2. 묵시적 해제로 나뉜다. 

 

1. 명시적 해제

    1.1 강제 해제 

    1.2 비강제 해제(if, guard문을 사용하는 안전한 해제 방법) 

2. 묵시적 해제 

    2.1 컴파일러에 의한 해제 (다른 값과 비교를 통한 자동해제 방법)

    2.2 옵셔널의 묵시적 해제 

 

1. 명시적 해제 

1.1 강제 해제 

3번 라인 : Optional 

4번 라인 : Optional 이 해제된 걸 확인 할 수 있다. 

 

1.2 비강제 해제 

if문이나, guard문을 이용해서 확인 후 안전하게 해제하는 방법이다.

1) if문

    tester1을 가지고 예제를 돌렸다. 
    만약 tester1이 nil이 아니면 safeTester 값을 바인딩 후 값을 뱉을 것이고, 

    아니라면 nil을 출력할 것이다. 

    -> 출력문을 확인하면 "test"가 출력된 걸 확인할 수 있다. 

 

2) guard문 

    형태 : guard 조건문 else { 실행문 } 

    guard문은 라인을 지키는 지킴이처럼 조건에 만족하면 통과 / else 라면 실행문을 실행해야한다. 

    tester2로 예제를 돌렸다.

    만약 tester2가 nil이 아니라면 print(safeTester) 수행

    아니라면 return 

 

 

2.묵시적 해제 

2.1 컴파일러에 의한 해제 

다른값과 비교를 할 때  컴파일러가 알아서 옵셔널 값을 해제해서 비교시켜준다. 

1) tester3는 옵셔널 값인데, 비교가 가능할까? 

    실행시켰더니 에러가 발생하지 않는다. 

        -> 비교문에서는 컴파일러가 자동으로 옵셔널 값을 해제시켜준다. 

2) 과연 if문을 나온 tester3는 옵셔널이 해제된 상태일까? 

        -> 출력문에 보면 확인할 수 있듯이 그건 아니다. 

 

2.2 타입 뒤에 !가 붙은 옵셔널 변수

 Variable 상수에 5말고 다른 한글, 영어 등 문자가 들어가게 된다면 nil값을 반환한다.

 그래서 옵셔널이기에, 묵시적으로 !를 붙여 바인딩을 해줘야 한다. 

tester5 : Int

오류없이 출력이 잘 됐다.