Swift: Optional은 Enum 타입이다 ?

devapploper·2024년 1월 18일
0

스위프트 zero to hero

목록 보기
10/10
post-thumbnail

Optional은 Enum type이다.

아래는 스위프트 스탠다드 라이브러리에서 Optional의 내부 구현 일부를 발췌한 내용이다. 보다시피, Optional은 enum 타입으로 정의되어 있다.

enum Optional<Wrapped>: ExpressibleByNilLiteral {
	case none
	case some(Wrapped)

	public init(_ some: Wrapped) { self = .some(some) } // .some 케이스의 associated value로 값을 보관

	public init(nilLiteral: ()) { self = .none } // ExpressibleByNilLiteral conformance

	public func map<U>(_ transform: (Wrapped) throws -> U) rethrows -> U? {
  		switch self {
		    case .some(let y):
    			return .some(try transform(y)) // 다시 wrapping 해서 반환
		    case .none:
    			return .none
  		}
	}

	public func flatMap<U>(_ transform: (Wrapped) throws -> U?) rethrows -> U? {
		switch self {
			case .some(let y):
				return try transform(y) // 다시 wrapping 하지 않음
			case .none:
				return .none
		}
	}
}

따라서 enum에서 가능한건 Optional에서도 가능하다

let short: Int? = 3
let long: Optional<Int> = 3

let initWithSomeCase = Optional.some(3) // Optional<Int> 타입을 가짐
let initWithNoneCase = Optional.none // nil과 동일

switch short {
	case .some(let value):
		print("value is: \(value)")
	case .none:
		print("value is none")
}

if case let .some(value) = short {
	print(value) // prints 3
}

references

profile
iOS, 알고리즘, 컴퓨터공학에 관련 포스트를 정리해봅니다

0개의 댓글