Swift
[Swift] @dynamicMemberLookup 써보기
insub4067
2023. 10. 26. 16:06
GitHub - insub4067/Hello--dynamicMemberLookup
Contribute to insub4067/Hello--dynamicMemberLookup development by creating an account on GitHub.
github.com
@dynamicMemberLookup
struct Model {
var items: [String: String]
subscript(dynamicMember key: String) -> String? {
items[key]
}
}
struct Parent {
let id: Int
let name: String
}
@dynamicMemberLookup
struct Child {
let name: String
let parent: Parent
subscript<T>(dynamicMember keyPath: KeyPath<Parent, T>) -> T {
parent[keyPath: keyPath]
}
}
let model = Model(items: ["one": "1", "two": "2"])
let child = Child(name: "child", parent: .init(id: 0, name: "parent"))
func onAppear() {
print(model.one) // Optional("1")
print(model.two) // Optional("2")
print(child.id) // 0
print(child.name) // child
}
만약 같은 이름의 property 가 이미 존재한다면 subscript 으로 빠지지 않고 해당 인스턴스의 property 값을 뱉는다.