Swift'deki KeyPaths ve faydaları
KeyPath, yapı veya sınıf gibi bir türün belirli bir özelliğine veya alt özelliğine atıfta bulunmanın bir yoludur. Daha büyük bir veri yapısındaki belirli bir değere veya özelliğe bir kısayol veya referans gibidir.
Daha basit bir ifadeyle, Swift'deki anahtar yollar, daha geniş bir veri koleksiyonundaki belirli bir bilgi parçasına işaret eden tabelalar gibidir. Koleksiyonun tamamında arama yapmak zorunda kalmadan bu verilerin belirli bölümlerine erişmeyi ve bunları değiştirmeyi kolaylaştırırlar.
Örneğin, ve gibi Personözelliklerle çağrılan bir yapınız olduğunu varsayalım .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
İki tür anahtar yolu vardır: yazılabilir ve salt okunur anahtar yolları.
- Salt okunur KeyPath:
2. Yazılabilir KeyPath:
Yazılabilir bir anahtar yolu, yalnızca bir türün özelliğine veya alt özelliğine erişmenize değil, aynı zamanda değerini de değiştirmenize olanak tanır. Daha basit bir ifadeyle, değiştirilebilir bir türe atıfta bulunduğumuzda, salt okunur bir anahtar yol haline gelir. Bir var özelliğine erişirsek, bu yazılabilir bir anahtar yoldur.
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>
Kullanım Alanları:
Swift'de anahtar yolların daha birçok kullanımı vardır ve bazı örnekleri inceleyeceğiz.
Swift Toplama Yöntemlerinde
.mapSwift'de, anahtar yollar, ve gibi yöntemlere argüman olarak iletilebilir .filter. Derleyici, bir koleksiyondaki öğelere kolay erişim ve bunların değiştirilmesine izin vererek, anahtar yolunu bir kapanışa dönüştürecektir. Örneğin, bir nesne dizisinden insanların adlarını çıkarmak için yöntemi Personkullanabilir ve aşağıda gösterildiği gibi türün özelliğine .mapatıfta bulunan bir anahtar yolu iletebilirsiniz :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"]
Anahtar yollarını bu şekilde kullanmak, ayrı bir kapatma yazmak zorunda kalmadan nesnelerin belirli özelliklerine erişmenize ve bunları değiştirmenize izin verdiği için kodunuzu daha özlü ve okunabilir hale getirebilir.
Bir DSL (Etki alanına özgü dil) oluşturma:
Swift'deki KeyPath'ler, bir etki alanındaki belirli sorunları çözmek için etki alanına özgü diller (DSL'ler), mini diller oluşturmaya olanak tanır . KeyPath'leri kullanarak, koleksiyonları belirli ölçütlere göre filtreleyen yüklemler oluşturmak için tür açısından güvenli bir sözdizimi oluşturabiliriz.
Örneğin, bir Kişi nesnesi dizisini filtrelerken KeyPaths, yaşa dayalı ölçütleri okunabilir ve tür açısından güvenli bir şekilde ifade eden bir DSL oluşturmaya yardımcı olabilir. Örneğin:
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)]"
Özet:
Swift'deki anahtar yollar, karmaşık veri yapıları içindeki belirli değerlere kolay erişim ve değişiklik sağlayarak kod ifadesini ve tür güvenliğini artırır
Anahtar yollar çok güçlü ve esnek olabilir ve birçok gelişmiş Swift özelliğinde temel bir kavramdır.
Okuduğunuz için teşekkürler.
Şerefe!
Daha fazla güncelleme için lütfen bizi Twitter ve LinkedIn'de takip edin.
# SwiftUI #S wift.org # evangelistapps #TheComposableArchitecture #swift #iOS #coding #iOS16

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































