티스토리 뷰
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
그런데 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 하여서 사용하는 케이스 외에는 생각이 안나는데...
아무튼 알아두고 나중에 요긴하게 사용하렵니다.
'Mobile > iOS' 카테고리의 다른 글
swift. RealmSwift 이용하여 봅시다. (0) | 2021.04.03 |
---|---|
Swift. Method Swizzle. (0) | 2021.01.03 |
RxSwift, RxCocoa. Publish (0) | 2021.01.03 |
SwiftUI 처럼 Code로 View를 만들고 Preview를 바로 바로 보여주면서 개발하기 (0) | 2020.12.19 |
UIWindowSceneDelegate란 무엇인가? 어떨때 필요한가? (0) | 2020.12.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- rxswift
- ios
- Java
- windows10
- enum
- MySQL
- golang
- github
- ubuntu
- tomcat
- Xcode
- android
- Windows
- cocoapods
- docker
- php
- SWIFT
- go
- Codable
- git
- Linux
- nodejs
- war
- Gradle
- centos8
- Kotlin
- CentOS
- Spring
- Python
- intellij
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함