본문 바로가기

IOS Swift

Optional 이란?

Optional 이란?

변수의 값이 nil 일수도 있다는 것을 표현하기 위해 사용합니다. Swift에서의 nil 이란 value가 없는 것을 의미합니다. 

다른 언어에서처럼 포인터가 없다거나 그런 의미는 아닙니다.

 

사용법

var optionalInt: Int? = nil
var nonOptionalInt: Int = nil // error

print(optionalInt) //Optional(nil)

//옵셔널 타입에 값을 넣으면?
optionalInt = 3
print(optionalInt) //Optional(3)

 

그렇다면 optionalInt + nonOptionalInt  는 가능할까요?

불가능 합니다. optionalInt는 Optional로 한번 wrapping 되어 있기 때문에

Value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'? 

이런 에러가 발생합니다. 그래서 옵셔널 값을 사용하기 위해 옵셔널을 wrapping되어 있는것을 벗겨낼 필요가 있습니다.

알아두셔야 할 4가지 방법이 있습니다. 

 

옵셔널 해제 방법

  • 강제 옵셔널 해제 : !사용
  • 옵셔널 바인딩
  • 옵셔널 체이닝 (옵셔널을 해제하는 건 아니고 간단히 표현할 수 있게 도와줌)
  • Nil-Coalescing Operator

 

강제 옵셔널 해제

var optionalInt: Int? = nil
var nonOptionalInt: Int = nil // error

print(optionalInt) //Optional(nil)

//옵셔널 타입에 값을 넣으면?
optionalInt = 3
//!를 붙여서 강제로 옵셔널 해제시킴
print(optionalInt!) //3

강제로 해제 시키는 것이기 때문에 만약 optionalInt가 nil 이었을 때 !로 옵셔널을 벗겨내면 런타임 에러가 발생합니다.

Optional타입만 nil을 할당할 수 있기 때문입니다.

 

옵셔널 바인딩

var optionalInt: Int? = nil

optionalInt = 3

//옵셔널 바인딩
if let newInt = optionalInt { 
	print(newInt) //3
}

optionalInt가 nil이 아니면 { } 안쪽을 실행하게 됩니다. 강제로 해제하는 것이 아니기 때문에 에러에 대해 안전합니다.

 

옵셔널 체이닝 (옵셔널 해제는 아니고 간단히 표현도와줌)

struct A {
    var a: B? = B()
}

struct B {
    var b: C? = C()
}

struct C {
    var c: Int? = 5
}

var aaa = A()
print(aaa.a?.b?.c) //Optional(5)

//이런식으로 사용 안해도 됨
if let aaaa = aaa.a {
	if let aaaab = aaaa.b {
    	if let aaaabc = aaaab.c {
        	print(aaaabc) //5
        }
    }
}

 

Nil-Coalescing Operator

var a: Int? = nil

// nil 이면 3 출력
print(a ?? 3) // 3

 

 

출처 및 참고

공식문서 : https://developer.apple.com/documentation/swift/optional

반응형

'IOS Swift' 카테고리의 다른 글

SceneDelegate 란?  (2) 2021.09.16
MVC와 MVVM의 차이점 및 장단점  (0) 2021.09.09
Hashable Swift 4.1 전 과 후  (2) 2021.08.29
[자료구조] HashTable 이란?  (0) 2021.08.29
Hashable 이란? - Swift  (2) 2021.08.24