[Swift] (기초) Optional / 옵셔널

2021. 7. 13. 01:44🍏/Swift 기초 공부

값이 '있을 수도, 없을 수도 있음'

옵셔널이 아닌값에 nil을 할당시 에러가 난다.

옵셔널이 필요한 이유
nil의 가능성을 명시적으로 표현

닐이 들어올 수 있다. 닐이 들어올 수 없다를 명확히 해줌.

- nil 가능성을 문서화 하지 않아도 코드만으로 충분히 표현가능
 - 문서/주석 작성 시간을 절약

- 전달받은 값이 옵셔널이 아니라면 nil체크를 하지 않더라도 안심하고 사용
 - 효율적인 코딩
 - 예외 상황을 최소화하는 안전한 코딩

func someFunction(someOptionalParam: Int?){
    
}

func someFunction(someParam: Int){
    
}

//someFunction(someParam: nil) 닐이 들어올 수 없다.
someFunction(someOptionalParam: nil)

// Optional
// enum + general

//enum Optional<Wrapped>: ExpressibleByNilLiteral{
//    case none
//    case some(Wrapped)
//}
//
//let optionalValue: Optional<Int> = nil       - 완전한 문법
//let optionalValue: Int? = nil                - 간략

//Implicitly Unwrapped Optional 암시적 추출 옵셔널

//var optionalValue: Int! = 100
//switch optionalValue {
//case .none:
//    print("This Optional variable is nil")
//case .some(let value):
//    print("Value is \(value)")
//}
//
//// 기존 변수 처럼 사용 가능
//optionalValue = optionalValue + 1
//// nil 할당 가능
//optionalValue = nil
//// 잘못된 접근으로 인한 런타임 오류 발생 (nil에 +1)
//optionalValue = optionalValue + 1

//Optional 일반적인 옵셔널

//var optionalValue: Int?
//
//switch optionalValue {
//case .none:
//    print("This Optional variable is nil")
//case .some(let value):
//    print("Value is \(value)")
//}
//
//// nil 할당 가능
//optionalValue = nil
//
//// 기존 변수처럼 사용불가 - 옵셔널과 일반 값은 다른 타입이므로 연산불가 (집합,교환 등 모두 제한)
//optionalValue = optionalValue + 1