Swift는 타입을 지정해주지 않아도 형식 추론으로 타입을 지정해주는데 만약 값을 정해주지 않으면 타입추론을 할 수 없어 컴파일 에러가 발생한다.
let noValue
// error
let value : Sting
let value = "Result"
let value : Sting
print(value)
// error
결과는 상수 value가 초기화 되지 않고 사용되었다는 에러가 발생한다.
변수(var)와 상수(let)은 값을 읽기 전에 반드시 초기화를 해줘야한다.
또한 변수와 상수는 항상 타입에 맞는 값을 가지고 있어야 하는데 이를 Non Optional Type 이라고 한다.
만약 저장할 값이 없는경우, 예를들면 네트워크에서 가저온 값으로 상수를 초기화해야 할 때 연결불량등으로 값을 가져오지 못하면 값이 없다는것을 표현해야 한다. 그러나 항상 값을 가지고 있어야하는 Non Optional Type에서는 이러한 표현이 불가능하다. 이런 경우 사용되는 타입이 값을 저장하지 않아도 되는 Optional Type이다.
Oprional에서는 값이 없음을 나타낼때 다음과 같이 표현하면 된다.
let count : Int? = nil
let count : Int = nil
// error
let count : Int? = nil
// count = nil
만약 표현식(Expression)이 nil이나 Optional로 도출된다면 이를 Optional Expression 이라고 부른다.
let a : Int? = nil
let b = a
b
또한 Oprional 은 아래와 같은 방법으로도 표현할 수 있다.
let a : Optional<Int> = nill
Optional Type은 연관값이라는 특별한 방법으로 값을 저장하는데
때문에 값을 출력할때도 독특한 형식으로 출력된다.
let a : String? = "Hello"
print(a)
// Optional("Hello")
Unwrapping 중에서 값을 강제로 추출하는 방법을 Forced Unwrapping이라고 하는데 Optional Expression에 '!'를 붙임으로 사용할 수 있다.
let a : Int? = 123
print(a!)
// 123
let a : Int? = nil
print(a!)
// fatal error
let num :Int? = nil
lf num != nil {
print(num!)
}
유익한 자료 감사합니다.