Swift/Swift 기초문법
[Swift 기초문법 - 70] KeyPath
힛해
2024. 8. 25. 01:37
728x90
KeyPath란?
특정 타입의 속성에 대한 경로르 나타내는 참조다.
KeyPath를 사용하면 객체의 특정 속성에 접근하거나, 그 속성을 읽고 쓸 수 있다. 이 기능은 특히 KVO와 같은 기능에 유용하다.
KeyPath의 기본 개념
KeyPath는 간단히 말해 객체의 속성에 대한 경로를 나타낸다.
KeyPath 사용 예제
struct Person {
var name: String
var age: Int
}
let person = Person(name: "Alice", age: 30)
// KeyPath 생성
let nameKeyPath = \Person.name
let ageKeyPath = \Person.age
// KeyPath를 사용하여 값 읽기
let personName = person[keyPath: nameKeyPath]
let personAge = person[keyPath: ageKeyPath]
print(personName) // 출력: Alice
print(personAge) // 출력: 30
Person 구조체에 대한 KeyPath를 사용하여 name과 age 속성에 접근한다.
KeyPath는 \ 문법을 사용하여 생성되며 [keyPath:] 서브스크립트를 통해 값을 가져올 수 있다.
WritableKeyPath
기본적으로 KeyPath는 읽기 전용이다. 그러나 WritableKeyPath가 제공되어 속성의 값을 변경할 수 있다.
struct Person {
var name: String
var age: Int
}
var person = Person(name: "Alice", age: 30)
// WritableKeyPath 생성
let ageKeyPath = \Person.age
// KeyPath를 사용하여 값 변경
person[keyPath: ageKeyPath] = 31
print(person.age) // 출력: 31
KeyPath 활용
1. 함수에 KeyPath 전달
func getValue<T, V>(from object: T, keyPath: KeyPath<T, V>) -> V {
return object[keyPath: keyPath]
}
let person = Person(name: "Bob", age: 25)
let name = getValue(from: person, keyPath: \Person.name)
print(name) // 출력: Bob
2. KeyPath와 map
KeyPath는 컬렉션에서 속성 값을 추출하는 데 유용하다.
struct Person {
var name: String
var age: Int
}
let people = [
Person(name: "Charlie", age: 25),
Person(name: "Dave", age: 28),
Person(name: "Eve", age: 22)
]
let names = people.map(\.name)
print(names) // 출력: ["Charlie", "Dave", "Eve"]