728x90
https://zeddios.tistory.com/943
https://developer.apple.com/documentation/swift/mirror
Mirror
- 정의: 어떤 타입의 instance의 하위 구조의 표현
- Mirror는 stored property나 tuple, collection과 같은 instance의 특정 부분들을 묘사한다.
- Mirror는 display style이라는 property를 제공해서 이 mirror가 어떻게 rendering 될지에대해서도 알려준다
- reflection:
- 프로그래밍 언어의 기능 중 하나로, 런타임에 type이 가지고 있는 멤버들을 검사할 수 있는 기능이다.
정의는 조금 어렵게 표현되어있지만 쉽게 말해서 내가 어떤 타입의 instance가 어떤 property들을 가지고 있는지를 collection형태로 찾아볼 수 있게 해주고 또한 내가 어떤 형태의 type인지도 알 수 있게 해준다.
children
- instance가 가지고 있는 stored property들의 collection
- 가지고 있는 property들의 이름, 그리고 value들에 대해서 받아올 수 있다.
- 다만 stored property들에 대한 정보만 가져오고 computed property의 정보는 가져올 수 없다.
struct TestClass {
let x: Int
let y: Int
let list: [Int]
var z: Int {
return x + y
}
}
let test = TestClass(x: 0, y: 1, list: [0, 1, 2])
let mirror = Mirror(reflecting: test)
print("count of child: \(mirror.children.count)")
mirror.children.forEach { child in
print("label: \(child.label), value: \(child.value)")
if child.value is Int {
print("It is Integer")
} else if child.value is Array<Int> {
print("It is Array")
}
}
/*
count of child: 3
label: Optional("x"), value: 0
It is Integer
label: Optional("y"), value: 1
It is Integer
label: Optional("list"), value: [0, 1, 2]
It is Array
*/
displayStyle
- enumeration으로 되어 있고 reflection한 instance가 어떤 type인지 알려준다
struct TestStruct {
let x: Int
let y: Int
let list: [Int]
var z: Int {
return x + y
}
}
class TestClass {
}
let test = TestStruct(x: 0, y: 1, list: [0, 1, 2])
let testClass = TestClass()
let mirror = Mirror(reflecting: test)
let classMirror = Mirror(reflecting: testClass)
print(mirror.displayStyle)
print(classMirror.displayStyle)
/*
Optional(Swift.Mirror.DisplayStyle.struct)
Optional(Swift.Mirror.DisplayStyle.class)
*/
기능을 잘만 활용한다면 내가 가지고 있어야 하는 다수의 값들을 collection형태의 단일 property로 선언할 필요 없이 각각의 element들은 property로 선언하여 좀 더 직관적으로 파악할 수 있게 활용할 수도 있을 것 같다.
728x90
'iOS > 설명' 카테고리의 다른 글
[iOS] OOP와 POP는 어떤 경우에 써야 할까 (고찰) (0) | 2024.03.17 |
---|---|
[iOS] High performance based drawing (0) | 2024.02.24 |
[iOS] iOS Webview에서 텍스트 복사하는법 (0) | 2023.07.15 |
[iOS] beginBackgroundTask (0) | 2023.06.24 |
[iOS] Pod 폴더 충돌 해결 (0) | 2023.02.05 |
댓글