옵셔널

·2022년 7월 27일

Swift 기초문법

목록 보기
11/11

옵셔널

eun + general
  1. nil의 가능성을 명시적으로 표현한다
    • nil 가능성을 문서화하지 않아도 코드만으로 충분히 표현이 가능
    • 문서, 주석 작성 시간을 절약한다.
  2. 전달받은 값이 옵셔널이 아니라면 nil 확인을 하지 않아도 안심하고 사용 가능하다
    • 효율적인 코딩이 가능하다
    • 예외 상황을 최소화하는 안전한 코딩
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
// 둘은 같은 의미, 형식만 다르당

암시적 추출 옵셔널

  1. 기존 변수처럼 사용이 가능하다
  2. 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 // 기존 변수처럼 사용 불가능! 옵셔널과 일반 값은 다른 타입이므로 연산 불가
profile
어?머지?

0개의 댓글