Swift의 KeyPath 및 이점
KeyPath는 구조체 또는 클래스와 같은 유형의 특정 속성 또는 하위 속성을 참조하는 방법입니다. 더 큰 데이터 구조 내의 특정 값이나 속성에 대한 바로 가기 또는 참조와 같습니다.
간단히 말해서 Swift의 키 경로는 더 큰 데이터 컬렉션 내에서 특정 정보를 가리키는 표지판과 같습니다. 전체 컬렉션을 검색하지 않고도 해당 데이터의 특정 부분에 더 쉽게 액세스하고 수정할 수 있습니다.
예를 들어 , 및 와 Person같은 속성으로 호출된 구조체가 있다고 가정해 보겠습니다 .nameageaddress
struct Address {
let streetAddress: String
let city: String
}
struct Person {
let name: String
var age: Int
let address: Address
}
var person = Person(
name: "John",
age: 24,
address: Address(
streetAddress: "2, qwerty",
city: "CA"
)
)
let nameKeyPath = \Person.name
let name = person[keyPath: nameKeyPath]
print(name) // John
let streetAddressKeyPath = \Person.address.streetAddress
print(person[keyPath: streetAddressKeyPath]) // 2, qwerty
키 경로에는 쓰기 가능 및 읽기 전용 키 경로의 두 가지 유형이 있습니다.
- 읽기 전용 KeyPath:
2. 쓰기 가능한 키 경로:
쓰기 가능한 키 경로를 사용하면 유형의 속성 또는 하위 속성에 액세스할 수 있을 뿐만 아니라 해당 값을 수정할 수도 있습니다. 간단히 말해서 변경 가능한 유형을 참조하면 읽기 전용 키 경로가 됩니다. var 속성에 액세스하면 쓰기 가능한 키 경로입니다.
let readOnlyKeyPath = \Person.name
print(type(of: readOnlyKeyPath)) // KeyPath<Person, String>
var writableKeyPath = \Person.age
print(type(of: writableKeyPath)) // WritableKeyPath<Person, Int>
person[keyPath: writableKeyPath] = 28 // 28
class Person {
var age = 0
}
let referenceWritableKeyPath = \Person.age
print(type(of: referenceWritableKeyPath)) // ReferenceWritableKeyPath<Person3, Int>
용도:
Swift에는 더 많은 키 경로 사용이 있으며 몇 가지 예를 살펴보겠습니다.
신속한 수집 방법
Swift에서 키 경로는 .map및 와 같은 메서드에 인수로 전달될 수 있습니다 .filter. 컴파일러는 키 경로를 클로저로 변환하여 컬렉션의 요소에 쉽게 액세스하고 조작할 수 있도록 합니다. 예를 들어 객체 배열에서 사람의 이름을 추출하려면 아래와 같이 메서드를 Person사용 하고 유형 의 속성을 .map참조하는 키 경로를 전달할 수 있습니다.namePerson
struct Person {
let name: String
var age: Int
}
let people = [
Person(name: "Alice", age: 25),
Person(name: "Bob", age: 30),
Person(name: "Charlie", age: 35)
]
let names = people.map(\.name)
print(names) // prints ["Alice", "Bob", "Charlie"]
이러한 방식으로 키 경로를 사용하면 별도의 클로저를 작성하지 않고도 객체의 특정 속성에 액세스하고 조작할 수 있으므로 코드를 더 간결하고 읽기 쉽게 만들 수 있습니다.
DSL(도메인 특정 언어) 만들기:
Swift의 KeyPath를 사용하면 도메인 내 특정 문제를 해결하기 위한 미니 언어인 DSL(도메인 특정 언어)을 만들 수 있습니다 . KeyPaths를 사용하면 특정 기준에 따라 컬렉션을 필터링하는 술어를 작성하기 위한 유형이 안전한 구문을 만들 수 있습니다.
예를 들어, Person 개체의 배열을 필터링할 때 KeyPaths는 연령 기반 기준을 읽기 쉽고 형식이 안전한 방식으로 표현하는 DSL을 만드는 데 도움이 될 수 있습니다. 예를 들어:
func > <T, V: Comparable>(lhs: KeyPath<T, V>, rhs: V) -> (T) -> Bool {
return { $0[keyPath: lhs] > rhs }
}
let olderThan30 = people.filter(\.age > 30)
print(olderThan30) // prints "[Person(name: "Bob", age: 30), Person(name: "Charlie", age: 35)]"
요약:
Swift의 키 경로를 사용하면 복잡한 데이터 구조 내에서 특정 값에 쉽게 액세스하고 수정할 수 있으므로 코드 표현력과 유형 안전성이 향상됩니다.
키 경로는 매우 강력하고 유연할 수 있으며 많은 고급 Swift 기능의 기본 개념입니다.
읽어 주셔서 감사합니다.
건배!
더 많은 업데이트를 보려면 Twitter 와 LinkedIn 에서 저희를 팔로우하세요 .
# SwiftUI #S wift.org # evangelistapps #TheComposableArchitecture #swift #iOS #coding #iOS16

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































