KeyPath
프로퍼티를 실제로 불러오거나 정보를 읽지 않은 채로 그 자체를 참조만 할 수 있게 한다.
struct Person{
var socialSecurityNumber: String
var name: String
}
let atj = Person(socialSecurityNumber: "13-2432-21", name: "TaeJeong")
let nameKeyPath = \Person.name
let SSNKeyPath = \Person.socialSecurityNumber
print(atj[keyPath: nameKeyPath])
print(atj[keyPath: SSNKeyPath])
KeyPath 활용하기
Identifiable 프로토콜을 사용할 때 객체마다 상이한 identifier 의 타입을 associatedType 과 KeyPath를 통해 다룰 수 있다.
protocol Identifiable {
associatedtype ID
static var idKey: WritableKeyPath<Self, ID> { get }
}
struct Person: Identifiable {
static let idKey = \Person.socialSecurityNumber
var socialSecurityNumber: String
var name: String
}
struct Book: Identifiable {
static let idKey = \Book.isbn
var isbn: String
var title: String
}
func printID<T: Identifiable>(about object: T) {
print(object[keyPath: T.idKey])
}
let atj = Person(socialSecurityNumber: "13-2432-21", name: "TaeJeong")
let Hamlet = Book(isbn: "1-134-2", title: "Hamlet")
printID(about: atj)
printID(about: Hamlet)
'iOS 개발 > Swift 문법' 카테고리의 다른 글
[iOS/Swift] Initializer 정리 (Swift 공식 문서) (0) | 2021.10.21 |
---|---|
[iOS/Swift] Optional type, guard let vs. if let (0) | 2021.04.12 |