티스토리 뷰
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
- git
- Windows
- war
- android
- Kotlin
- rxswift
- docker
- windows10
- Python
- Java
- enum
- ios
- centos8
- intellij
- Linux
- Codable
- MySQL
- php
- Xcode
- Gradle
- tomcat
- SWIFT
- nodejs
- Spring
- CentOS
- github
- golang
- ubuntu
- go
- cocoapods
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함