옵셔널에 관하여

2022. 6. 2. 12:30swift

옵셔널이란?

옵셔널은 값이 있을 수도 있고, 없을 수도 있다는 것을 나타내는 표현이다.

없다는것은 nil이라 표현한다.(값이 없음을 의미한다)

스위프트에서는 안전성을 높이기 위해서 오류 발생을 싫어한다.

그래서 오류 대신 nil값을 반환함으로써 개발자에게 문제가 있다는 것을 알린다.

오류 발생의 가능성을 조금이라도 있으면 옵셔널로 정의한다.

 

옵셔널을 해제 하는 방법

해제방법

명시적 해제- 강제, 비강제 해제

묵시적 해제- 컴파일러에 의한 자동 해제

                  -"!"연산자를 사용한 자동 해제  가 존재한다

 

강제해제"!"

명시적 해제에서 가장 많이 쓰이는 강제 해제

강제 해제는 옵셔널 값의 nil 여부와 관계없이 옵셔널을 무조건 해제한다.

옵셔널의 강제 해제 방법은 옵셔널 타입의 값 뒤에 "!"기호만 붙여주면 된다.

"!"= 강제 해제 연산자

 

묵시적 해제- 옵셔널의 묵시적 해제 구문은 일반 옵셔널 타입의 변수 선언 구문과

매우 유사하다. ? 연산자 대신 ! 연산자만 붙혀주면 된다.

var a: Int? = Int("12345")

print(a) ===출력 값은 Optional(12345) 

 

?? 은 무엇인가  (닐 병합 연산자)

nil coalescing operator : ??을 써서 아주 간단히 언래핑

 

nil 병합 연산자의 장점은 '??'를 사용하여 표기하여 한줄로 언래핑을 아주 쉽게 수행할 수 있습니다. 옵셔널 바인딩이나 옵셔널 체이닝의 경우 if let이나 guard let을 써야해서 코드가 길어질 수 있지만 nil 병합 연산자는 한줄로 쓸 수 있다는 장점이 있죠! 그럼 간단한 코드를 통해 알아보겠습니다.

 

let a: Int? = 10

var b: Int

 

if let a = a {

    b = a

    print(b)

}

위의 코드와 같이 옵셔널 타입 a와 Int형 b 변수를 선언하고 옵셔널 바인딩을 통해 옵셔널을 추출하여 만약 a가 nil이 아니라면 b에 a를 넣는 코드를 만들었습니다. a를 선언할때 10이라는 초기값을 주었고 nil값은 들어가지 않았으므로 b에 10이 들어가 출력이 될 것입니다.

 

 

옵셔널 바인딩

옵셔널 바인딩이란? - 조건문 내에서 일반 상수에 옵셔널 값을 대입하는 방식.

"반드시" 조건문에서만 사용해야하며 상수에 옵셔널 값을 대입한 결과는 true/false로 리턴됩니다.

 

if 조건문 내에서의 옵셔널 바인딩 처리 ex)

var abc = "gg"

if let han = Int(abc) {

    print("값이 변환된다. 변환된값은 \(han)이다")

} else {

    print("값 실패")

}   === 출력값 값 실패 조건제시가 같지 않기때문에 값 실패

 

가드렛 구문

 

var x: Int? = 10

var y: Int? = nil

func gg() {

    guard let xx = x else {

        return print("xis")

    }

    print(xx)

    

    guard let yy = y else {

        return print ("yis")

    }

    print(yy)

}

Operation() === 출력값

10

yisx는 가드렛을 통과 해서 10이 나오지만 y는 nil 값이라서  else로 빠져 yis로 반환된다

'swift' 카테고리의 다른 글

함수  (0) 2022.06.02
변수에 대해서  (0) 2022.06.02
배열에 관하여  (0) 2022.06.02
옵셔널 바인딩이란?  (0) 2022.05.09
연산 프로퍼티의대해서  (0) 2022.05.09