옵셔널
eun + general
let optionalConstant: Int? = nil
// let someConstant: Int = nil 얘 안돼~
func someFunction(someOptionalParam: Int?)
{
}
func someFunction(someParam: Int)
{
}
someFunction(someOptionalParam: nil)
//someFunction(someParam: nil)
enum Optional<Wrapped> : ExpressibleByNilLiteral
{
case none // 열거형의 기본 타입, 옵셔널의 값이 없다!
case sone(Wrapped) // 옵셔널의 값이 있다!
}
let optionalValue: Optional<Int> = nil
let optionalValue2: Int? = nil
// 둘은 같은 의미, 형식만 다르당
암시적 추출 옵셔널
var optionalValue3: Int! = 100
switch optionalValue3 {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
//옵셔널은 기본적으로 열거형이기 때문에, 저렇게 swith-case 구문을 사용할 수 있다.
optionalValue3 = optionalValue3 + 1 // 기존 변수처럼 사용 가능
optionalValue3 = nil // nil 할당 가능
optionalValue3 = optionalValue3 + 1 // 잘못된 접근으로 인한 런타임 오류 발생. 여기선 nil을 할당 했는데 변수에 접근하려 하니까 발생
옵셔널
그 값이 있을 수도, 없을 수도?
기존 변수처럼 사용이 불가능하다
var optionalValue4: Int? = 100 // int값이 있을 수도, 없을 수도
switch optionalValue4 {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
optionalValue4 = nil // 가능
// optionalValue4 = optionalValue4 + 1 // 기존 변수처럼 사용 불가능! 옵셔널과 일반 값은 다른 타입이므로 연산 불가