Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- clean architecture
- 리펙터링
- uitableview
- collectionview
- 리팩토링
- MVVM
- ribs
- HIG
- swift documentation
- map
- Refactoring
- combine
- ios
- tableView
- 리펙토링
- uiscrollview
- Human interface guide
- swiftUI
- Xcode
- rxswift
- SWIFT
- Protocol
- Clean Code
- UICollectionView
- 클린 코드
- 애니메이션
- RxCocoa
- Observable
- UITextView
- 스위프트
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] Mirror 개념, Mirror(reflecting:) 본문
Mirror 개념
- mirror 의미: 인스턴스의 *display style과 하위 정보를 표현하는 구조체를 의미
* display style: struct인지, class인지, enum인지 구분을 위한 값 - 쉽게 말해서, Mirror는 특정 인스턴스의 타입, 그 인스턴스의 하위 값(인스턴스, 메소드 등)의 정보를 가지고 있는 것
- display style이란?
- Mirror 내부에서 정의한 switch case 문
- struct, class, enum, tuple 구분을 위한 값
public enum DisplayStyle : Sendable {
case `struct`
case `class`
case `enum`
case tuple
case optional
case collection
case dictionary
case set
public static func == (a: Mirror.DisplayStyle, b: Mirror.DisplayStyle) -> Bool
public func hash(into hasher: inout Hasher)
public var hashValue: Int { get }
}
Mirror에서 알면 좋은 것
* 예제에 사용할 struct
struct ExampleStruct {
enum InnerEnum {
case a
}
let name = "jake"
let innerEnum = InnerEnum.a
}
- 생성자 - Mirror(reflecting:)
- reflecting에 인스턴스를 주입하여 구하기
let exampleStruct = ExampleStruct()
let mirror = Mirror(reflecting: exampleStruct)
- subjectType 인스턴스: 주입한 인스턴스의 타입
print(mirror.subjectType)
// ExampleStruct
- displayStyle 인스턴스: 인스턴스의 타입 키워드 반환 (class, enum, tuple, struct..)
print(mirror.displayStyle)
// Optional(Swift.Mirror.DisplayStyle.struct)
- children 인스턴스: 위에서 Mirror 생성자에 넣어준 인스턴스의 하위 정보에 대한 표현
print(mirror.children)
// AnyCollection<(label: Optional<String>, value: Any)>
mirror.children을 보면? -> ExampleStruct 프로퍼티들에 대한 정보를 출력
mirror.children
.forEach { child in
print(child.label, "=", child.value)
}
// Optional("name") = jake
// Optional("innerEnum") = a
* 전체 코드: https://github.com/JK0369/ExMirror
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments