digging을 위해, 공식 문서와 swift 오픈소스, xcode에서 option 누르고 자세히 보기 등등을 알려주셨다.
그 일환으로 내주신 과제:
var a: Int? = 3
print(a) // Optional(3)
a를 옵셔널 변수로 선언했다.
옵셔널은 값이 있을 수도, 없을 수도 있는 자료형인데,
3이라는 명확한 값을 넣어줬음에도 불구하고 Optional(3)
이라는 문자열이 출력된다.
그럼 어떤 이유로 인해 Optional(3)
이 출력되는 것일까?
Swift 오픈소스 - 옵셔널 관련 부분을 보면
@_unavailableInEmbedded
extension Optional: CustomDebugStringConvertible {
/// A textual representation of this instance, suitable for debugging.
public var debugDescription: String {
switch self {
case .some(let value):
#if !SWIFT_STDLIB_STATIC_PRINT
var result = "Optional("
#if !$Embedded
debugPrint(value, terminator: "", to: &result)
#else
_ = value
"(cannot print value in embedded Swift)".write(to: &result)
#endif
result += ")"
return result
#else
return "(optional printing not available)"
#endif
case .none:
return "nil"
}
}
}
Swift에서 Optional은 CustomDebugStringConvertible
프로토콜을 준수하는 것을 볼 수 있다.
print 함수 호출 시 해당 프로토콜에 의해 출력 형식이 정해지는데,
값이 있다면 Optional(value)
가,
값이 없다면 nil
이 출력되는 것이다.
이처럼 swift의 공식 자료등을 통해 혼자서도 더 깊게 공부할 수 있다.
Swift 언어 문서와 오픈소스 코드, 그리고 Xcode의 다양한 기능을 적극적으로 활용하여 Swift 언어의 내부 동작을 이해하고, 더 나은 코드 작성법을 습득해 나가야겠다.