반응형
Mirror
Mirror란
- reflection은 일반적인 프로그래밍 기능 중 하나로, 런타임에 동적으로 멤버를 검사하고 작업할 수 있습니다. 원래는 Swift같이 정적으로 타입을 지정하는 언어에는 사용하지 않지만 Swift2부터 지원이 추가되었습니다.
- Swift에서 reflection을 사용하면 struct, class 혹은 기타 타입에 관련없이 타입에 있는 stored property의 값을 읽을 수 있습니다.
- reflection을 사용하기 위해 필요한 객체가 Mirror입니다.
- Mirror는 인스턴스의 저장 property, collection 혹은 tuple의 요소 등에 대해 특정 인스턴스를 구성하는 부분을 설명합니다.
- Mirror는 어떻게 Mirror가 렌더링될지 지정하는 "display style"이라는 property도 제공합니다.
- Mirror 타입을 사용하면 모든 타입의 값 표현을 표시할 수 있습니다. 예를 들어 dump 메서드에서 해당 인스턴스의 런타임 내용을 렌더링하는데에도 Mriror가 사용됩니다.
Mirror 생성자
- subject가 Mirror를 생성하고 싶은 인스턴스입니다.
- 동적 객체가 CustomReflectable 프로토콜를 채택하고 있다면, mirror의 결과값은 customMirror property에 의해 결정됩니다.
Mirror 사용 예시
struct House {
static var category: String = "building"
var name: String
var detail: String
var pullName: String {
return House.category + name
}
}
let aHouse = House(name: "A", detail: "202")
print(aHouse)
let mirror = Mirror(reflecting: aHouse)
mirror.children.forEach { child in
print(child)
}
// House(name: "A", detail: "202")
// (label: Optional("name"), value: "A")
// (label: Optional("detail"), value: "202")
- static property 및 computed property를 제외한 stored property를 읽어올 수 있음을 확인할 수 있습니다.
- 이러한 기능을 통해 특정 객체의 데이터를 JSON화 하는 등으로 응용하여 활용할 수 있습니다.
출처 및 참고 : https://developer.apple.com/documentation/swift/mirror
반응형
'🍎 Apple > Swift' 카테고리의 다른 글
[Swift] AVFoundation 기초 (0) | 2023.07.15 |
---|---|
[Swift][문서의역] Macro (4) | 2023.07.15 |
[Swift] autoreleasepool (2) | 2022.05.27 |
[Swift] UNUserNotificationCenter 살펴보기 (0) | 2022.05.26 |
[Swift] PhotoKit으로 사진앱에서 사진 가져오기 (0) | 2022.05.22 |