Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UICollectionView
- 리팩토링
- UITextView
- 스위프트
- Refactoring
- Xcode
- 리펙토링
- 리펙터링
- Observable
- SWIFT
- 클린 코드
- 애니메이션
- RxCocoa
- tableView
- swiftUI
- uiscrollview
- Protocol
- combine
- uitableview
- MVVM
- HIG
- ios
- ribs
- swift documentation
- clean architecture
- map
- Clean Code
- Human interface guide
- rxswift
- collectionview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] @dynamicMemberLookup 이해하기, subscript(dynamicMember key: String) -> String 본문
iOS 응용 (swift)
[iOS - swift] @dynamicMemberLookup 이해하기, subscript(dynamicMember key: String) -> String
jake-kim 2023. 8. 7. 01:44@dynamicMemberLookup 개념
- 컴파일 타임에 정의하지 않은 property에 대한 접근을 런타임에 처리하도록 해주는 역할
- dynamic member lookup라고 명칭한 이유: 컴파일 타임이 아닌 런타임 기준으로(dynamic) 프로퍼티에 dot으로 접근(member lookup)한다는 의미
- 런타임에 접근하게 해주는데, 이 때는 dot으로 접근하게끔 하는 역할
- @dynamicMemberLookup을 선언하면 subscript(dynamicMember key: String) -> String 필수 구현이 필요
ex) Person이라는 구조체에 @dynamicMemberLookup을 사용
- 의미: Person이라는 프로퍼티에 접근할 때, 이 인스턴스를 사용하는 쪽에서 런타임에 생성되는 프로퍼티에 컴파일 에러 없이 접근이 가능하다는 의미
- yourName은 property가 아닌데 마치, 런타임 시점에(dynamic) property처럼 접근이 가능한 것(member lookup)
@dynamicMemberLookup
struct Person {
var name: String
subscript(dynamicMember key: String) -> String {
switch key {
case "yourName":
return name
default:
return "none"
}
}
}
var p = Person(name: "jake")
p.yourName // "jake"
- 동작 방식 이해하기
- 컴파일 타임에 정해진 프로퍼티가 아닌, 런타임에 동적으로 추가될 수 있는 값들을 문자열 형태가 아닌 마치 프로퍼티처럼 접근할 수 있는 방법은 @dynamicMember을 선언
- @dynamicMember을 선언하면 subscript(dynamicMember:String) 구현이 필요
- 외부에서 instance.abc라고 접근하면 subscript(dynamicMember:String)메소드 안으로 "abc"문자열이 들어오며 여기서 문자열을 비교하여 특정 값을 리턴해주는 것
ex) 애플 Foundation의 AttributedString 구현에서 @dynamicMember 사용
- AttributeContainer를 @dynamicMember속성으로 적용하여 attributed key들을 런타임 시점에(dynamic) 마치 프로퍼티 처럼 dot으로 접근(member look up)하게끔 인터페이스를 구현해놓은 것
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments