오늘 찾아본 부분은 siwft 공식 github이다.
The Swift Programming Language
The Swift Programming Language has 20 repositories available. Follow their code on GitHub.
github.com
이 부분에서 Optional 타입에서 무엇을 하고 있기에 print할때 Optional()이 붙어서 나올까 찾아보았다.
검색 결과와 내가 직접 찾아보았을 때가 좀 다른 결과가 나왔다.
검색 -> CustomStringConvertible 프로토콜을 사용하여
1
2
3
4
5
6
7
8
9
10
|
extension Optional: CustomStringConvertible {
public var description: String {
switch self {
case .none:
return "nil"
case .some(let value):
return "Optional(\(value))"
}
}
}
|
cs |
.some이 value가 있을때의 case이고 none의 경우가 값이 없는 경우이다.
이런식으로 단순하게 되어있는것에 반해서
github에 optional.swift에서는 해당 프로토콜도 저런 확장자도 없었다.
그래서 한참 해맨 후 비슷해 보이는 함수는 발견하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
@_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"
}
}
}
|
cs |
해당 함수의 경우에는 CustomDebugStringConvertible 프로토콜을 체택하고 있는데
해당 부분은 디버깅을 진행할 때 적절한 텍스트 표현을 제공하기 위한 확장을 정의한다.
#if !SWIFT_STDLIB_STATIC_PRINT의 경우에는 스위프트 표준 라이브러리의 조건부 처리를 진행하고
#if !$Embedded의 경우에는 임베디드 환경을 체크하는 부분이라고 하는데 이 두 부분이 잘 이해가 되지않는다.
그러나 이 부분이 String타입으로 Optional()로 반환을 하고 있어 이부분으로 변경이 된건지 확인이 필요할듯 하다.
'Ios > Swift' 카테고리의 다른 글
[Swift] Delegate 패턴 개념 잡기 (0) | 2024.07.05 |
---|---|
[Swift] CustomTableViewCell에 대한 끄적임 (0) | 2024.07.02 |
[Swift] NSExpression과 expressionValue (0) | 2024.06.25 |
[Swift] 앱 생명주기 (App Lifecycle) .IOS (0) | 2024.06.19 |
[Swift] Generic 스위프트 제네릭 (0) | 2022.08.07 |