1. Optional

  • nil의 가능성을 명시적으로 표현
enum Optional<Wrappped>: ExpressibleByNilLiteral {
	case nume
    case some(Wrapped)
}

// 아래 표현 사용가능
let optionalValue: Optional<Int> = nil
let optionalValue: Int? = nil

2. 암시적 추출 옵셔널 - Implicitly Unwrapped Optional

  • !로 사용
var optionalValue: Int! = 100

switch optionalValue {
	case .none:
    	print("nil")
    case .some(let value):
    	print("\(value)")
}

// 기존 변수처럼 사용가능
optionalValue = optionalValue + 1
// nil 할당 가능
optionalValue = nil

3. 일반적 옵셔널

  • ?로 사용
var optionalValue: Int? = 100

switch optionalValue {
	case .none:
    	print("nil")
    case .some(let value):
    	print("\(value)")
}

// 기존 변수처럼 사용불가 - 일반값과 옵셔널은 다른 타입으로 연산 불가
optionalValue = optionalValue + 1
// nil 할당 가능
optionalValue = nil

4. Optional Binding

  • 옵셔널 값을 추출하는 방법중 하나
  • nil 체스 + 안전한 값 추출
func printName(name: String) {
	print(name)
}

var myName: String? = nil

printName(myName)
// 전달값 타입이 다르기 떄문에 컴파일 오류 발생
  • if - let 방식
func printName(name: String) {
	print(name)
}

var myName: String? = nil

If let name: String = myName {
	printName(myName)
} else {
	print("myName == nil")
}

5. Force Unwrapping

  • 옵셔널 값 강제추출
  • 추천되지 않는 방식
func printName(name: String) {
	print(name)
}

var myName: String? = "ss"

printName(myName) // ss

myName = nil

// 강제 추출시 값이 없음으로 런타임 오류
printName(myName!)
profile
Wooyo의 개발 블로그

0개의 댓글