Mobile/iOS
Swift. @dynamicMemberLookup
out of coding
2021. 1. 3. 15:39
swift의 dynamicMemberLookup에 대해서 알아볼까 합니다.
4.2에서 만들어진 녀석인데요.
Dictionary 형태의 값을 가지고 subscript(dynamicMember:)를 가지고 값을 마치 property 처럼 사용이 가능하도록 한 겁니다.
다음과 같은 형태로 만들수 있어요.
@dynamicMemberLookup
struct PropertyDictionary {
private let properties: [String: Any]
init(_ dictionary: [String: Any]) {
properties = dictionary
}
subscript(dynamicMember string: String) -> Any? {
return properties[string]
}
}
자 이렇게 만들어 두면 사용하는 쪽에서는?
let dictionary: [String: Any] = [
"abc": 1, "a": "abc"
]
let property = PropertyDictionary(dictionary)
print("test:", property.a ?? "aaa")
그냥 이렇게 파싱해서 사용한것처럼 사용이 가능합니다.
코드는 아래에도 올려두었어요
github.com/outofcode-example/iOS-PropertyDictionary
outofcode-example/iOS-PropertyDictionary
Using dictionary a like property. Contribute to outofcode-example/iOS-PropertyDictionary development by creating an account on GitHub.
github.com
그런데 Swift 5.1에서 추가가 되었습니다.
@dynamicMemberLookup
struct PersonWrapper<T> {
private let primate: T
init(_ primate: T) {
self.primate = primate
}
subscript<U>(dynamicMember keyPath: WritableKeyPath<T, U>) -> U {
return primate[keyPath: keyPath]
}
}
struct Person {
var name: String = "DH"
var age: Int = 100
}
이렇게 접근이 가능합니다.
let person = PersonWrapper(Person())
print(person.name)
그렇네요 정말 Wrapping 하여서 사용하는 케이스 외에는 생각이 안나는데...
아무튼 알아두고 나중에 요긴하게 사용하렵니다.