-
[Swift] @dynamicMemberLookup 써보기Swift 2023. 10. 26. 16:06
@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 값을 뱉는다.
'Swift' 카테고리의 다른 글
[Swift] Module 화 된 프로젝트의 Build, Compile 속도 향상 시키기 (2) 2024.01.23 [TIL] CoreData 꿀팁 (0) 2024.01.05 [Swift] KeyPath, WritableKeyPath, ReferenceWritableKeyPath 차이와 구분해서 사용하기 (0) 2023.10.25 [Swift] NSPredicate format placeholders (0) 2023.10.25 [Combine] AsyncPublisher 란? (0) 2023.10.24