옵셔널 타입은 변수 또는 상수에 값이 할당되지 않은 상황을 처리하기 위해 안전하고 일관된 접근 방식을 제공하기 위한 장치이다.
스위프트에서 값을 할당하지 않거나, nil을 할당할 수 있는 것은 옵셔널 타입 뿐이다.
변수를 선언할 때, 데이터 타입 선언 다음에 ? 를 붙여서 옵셔널이 되게 한다.
var a: Int?
다음과 같이 a라는 변수를 선언했을 때 어떠한 값도 설정되지 않은 옵셔널은 nil을 값으로 갖는다.
옵셔널에 값이 할당되었다면 해당 값이 옵셔널 내에서 '래핑되었다(wrapped)'라고 말한다.
래핑된 값을 그대로 사용하게 되면 오류가 나게 되는데 이를 방지하기 위해서 강제 언래핑이나 옵셔널 바인딩이라는 방법으로 값을 꺼내서 꺼내어 사용해야한다.
var a: Int?
a = 100
print(a)
// 에러
print(a!)
//100
앞서 말한 것처럼 값을 꺼내서 사용하기 위한 두번째 방법이다.
if let 또는 if var 구문이 사용된다.
if let temp = a{
print(temp)
}
if var temp = a{
print(temp)
}
여기에서 선언된 상수 또는 변수는 if 구문 안에서만 유효한 상수이다. 따라서 다른 if문에서 같은 변수 또는 상수 이름을 사용해도 괜찮다.
또한, 위와 같은 이유로 옵셔널로 할당된 동일한 이름을 사용해도 충돌이 나지 않는다.
if let a = a{
print(a)
}
if var a = a{
print(a)
}
if let 구문을 사용할 때 하나 이상의 변수를 사용할 때와 조건문을 포함할 때도 사용할 수 있다.
if let a = a, let b = b, let c = c ..., <조건식>{
옵셔널을 선언할 때 ? 대신 !를 사용하면 강제적으로 언재필할 수 있다.
var a: Int!
a = 100
if a != nil{
print(a)
} else {
print("value is nil")
}