옵셔널은 어떠한 값이 있을 수도 없을 수도 있다는 것을 나타낸다.
옵셔널 변수, 상수 등은 데이터 타입 뒤에 물음표(?)
붙여 표현
var myName: String? = "Jake"
print(myName)
>>> Jake
💡즉 변수,상수의 값이 nil
일 수도 있다.
Swift에서는 String
타입을 Int
타입으로 변환하기 위한 Int
메서드를 가진다. 하지만 모든 문자형이 정수형으로 변환❌ "123" ⇒ 123 but, "Hello World"
⇒ 분명한 값으로 변환❌
let possibleNumber = "123"
let convertedNumber = Int(posssibleNumber)
// convertedNumver is inferred(추론하다) to be of type "Int"?, or "optional Int"
toInt
메서드가 안되는 것으로 보아, Int
가 아닌 Optional Int 값을 리턴하고 있다.
Int
가 아닌 Int?
로 쓴다.Int
값을 가지거나 아예 전혀 값을 가지지 않는 다는 것을 의미Int
값을 가지거나 값이 없을 수 있다.옵셔널 변수의 값을 없는 상태로 만들어준다.(옵셔널이 아닌 경우 사용❌)
var serverResponseCode: Int? = 404
// serverResponseCode contains an actual Int value of 404
serverResponseCode = nil
// serverResponseCode now contains no value
옵셔널 변수에 값을 할당하지 않을 경우 자동적으로 nil
이 할당된다.
var surveyAnswer: String?
// surveyAnswer is automatically set to nil
if
문을 사용하여 옵셔널과 nil
을 비교하여 옵셔널에 값이 있는지 확인할 수 있다.
옵셔널에 값이 없다면 nil
로 간주
if convertedNumber != nil {
print("convertedNumber contains some integer value.")
}
// Prints "convertedNumber contains some integer value."
옵셔널 값의 뒤에 !
를 붙여주면 값을 강제로 추출하여 반환해준다. 강제 추출 시 옵셔널에 값이 없다면, 즉 nil
이라면 런타임 오류가 발생한다.
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."
참고: https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html