KeyPath Temelleri
Özelliklere birinci sınıf değerler olarak başvurun.
KeyPath Temelleri, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Anahtar Yolu Nedir
anahtar yolu, bir özelliğe gerçekten erişmeden o özelliğe giden yolu açıklayan bir değerdir. Bunu, okumak istediğiniz özelliğe ilişkin, hangi örnekten okuyacağınızdan bağımsız, saklanmış ve yeniden kullanılabilir bir başvuru olarak düşünebilirsiniz.
Bir anahtar yolunu ters eğik çizgi, tür adı, nokta ve özellik adıyla yazarsınız. Swift bu ifadeye, diğer herhangi bir değer gibi aktarabileceğiniz bir KeyPath değeri verir.
struct Person {
let name: String
let age: Int
}
let nameKeyPath = \Person.name
print(type(of: nameKeyPath))Değer Okuma
Bir özelliği anahtar yolu aracılığıyla okumak için bir örnek üzerindeki [keyPath:] alt indis gösterimini kullanın. Anahtar yolunu köşeli parantezlerin içine geçirirsiniz ve Swift bu yoldaki değeri döndürür.
Bu, özellik adını doğrudan yazmanın çalışma zamanındaki karşılığıdır; ancak artık özellik sabit kodlanmak yerine veriler tarafından seçilir.
struct Person {
let name: String
let age: Int
}
let alice = Person(name: "Alice", age: 30)
let path = \Person.name
print(alice[keyPath: path])Anahtar Yolu Sözdizimi Ayrıntıları
Genel biçim, ters eğik çizgi kaçış gösterimi, ardından kök tür, nokta ve özellik adıdır. Ters eğik çizgi, Swift'e özellik değerini değil bir anahtar yolu istediğinizi bildirir.
Kök tür, yolun başladığı türdür. Sonuç türü, son özelliğin türüdür. Bu nedenle Person türünden onun age özelliğine giden bir yolun kökü Person, değer türü ise Int olur.
struct Person {
let name: String
let age: Int
}
let ageKeyPath: KeyPath<Person, Int> = \Person.age
let bob = Person(name: "Bob", age: 42)
print(bob[keyPath: ageKeyPath])İç İçe Özellikler Arasında Zincirleme
Anahtar yolları iç içe değerlere kadar ilerleyebilir. Bir özellik kendi başına bir yapıysa, daha derindeki bir özelliğe ulaşmak için yola başka bir noktayla devam edebilirsiniz.
Zincirin tamamı yine tek bir anahtar yolu değeridir; kök ve sonuç türleri zincirin başlangıcını ve sonunu yansıtır.
struct Address {
let city: String
}
struct Person {
let name: String
let address: Address
}
let cityPath = \Person.address.city
let carol = Person(name: "Carol", address: Address(city: "Oslo"))
print(carol[keyPath: cityPath])Anahtar Yollarını Değişkenlerde Saklama
Anahtar yolu yalnızca bir değer olduğundan, onu bir değişkende saklayabilir, bir işlevden döndürebilir veya bir anahtar yolları koleksiyonunu tutabilirsiniz. Bu, çalışma zamanında hangi özelliğin okunacağına karar vermenizi sağlar.
Burada bir bayrağa göre saklanan iki anahtar yolundan birini seçiyoruz.
struct Person {
let name: String
let age: Int
}
let showAge = true
let chosen: PartialKeyPath<Person> = showAge ? \Person.age : \Person.name
let dave = Person(name: "Dave", age: 27)
print(dave[keyPath: chosen])PartialKeyPath ve AnyKeyPath
Swift'te küçük bir anahtar yolu türleri ailesi vardır. KeyPath<Root, Value> her iki ucu da bilir. PartialKeyPath<Root> kökü bilir, ancak değer türünü siler. AnyKeyPath ise her ikisini de siler.
Ne kadar çok tür bilgisi saklarsanız derleyici sizin için o kadar fazla denetim yapabilir. Farklı değer türlerine sahip yolları gerçekten karıştırmanız gerekmediği sürece kısmi veya genel biçimlere başvurmayın.
struct Person {
let name: String
let age: Int
}
let paths: [PartialKeyPath<Person>] = [\.name, \.age]
let eve = Person(name: "Eve", age: 19)
for p in paths {
print(eve[keyPath: p])
}Bilinen Bir Tür İçinde Kısa Yazım
Kök tür bağlamdan zaten biliniyorsa tür adını bırakıp yalnızca ters eğik çizgiyi, noktayı ve özelliği yazabilirsiniz. Derleyici kökü çıkarır.
Bu kısa yazım, özellikle öğe türünün açıkça belli olduğu koleksiyon işlemlerinde çağrı noktalarını kısa tutar.
struct Person {
let name: String
let age: Int
}
func value(of person: Person, at path: KeyPath<Person, Int>) -> Int {
person[keyPath: path]
}
let frank = Person(name: "Frank", age: 55)
print(value(of: frank, at: \.age))İşlev Bağımsız Değişkenleri Olarak Anahtar Yolları
Yaygın bir kalıp, bir anahtar yolunu kabul edip bunu birçok örneğe uygulayan genel bir işlevdir. Bu, okuduğunuz şeyi okuma işlemini gerçekleştiren mantıktan ayırır.
Burada genel bir yardımcı, bir kişi listesindeki herhangi bir türün herhangi bir özelliğini çıkarır.
struct Person {
let name: String
let age: Int
}
func extract<T>(_ people: [Person], _ path: KeyPath<Person, T>) -> [T] {
people.map { $0[keyPath: path] }
}
let people = [Person(name: "Ana", age: 21), Person(name: "Ben", age: 34)]
print(extract(people, \.name))
print(extract(people, \.age))Anahtar Yolları ve Hesaplanan Özellikler
Salt okunur anahtar yolları hesaplanan özelliklerle de çalışır. Yol hesaplamayı içerir; bu nedenle yol üzerinden okuma yapmak alıcıyı çalıştırır.
Bu, anahtar yolunun saklanan özelliklerle sınırlı olmadığı anlamına gelir; okunabilen her özellik uygundur.
struct Rectangle {
let width: Double
let height: Double
var area: Double { width * height }
}
let areaPath = \Rectangle.area
let r = Rectangle(width: 3, height: 4)
print(r[keyPath: areaPath])Kimlik Anahtar Yolu
Değerin tamamına, tek başına bir ters eğik çizgi, ardından nokta ve self yazılarak başvurulan özel bir anahtar yolu vardır. Bu yol üzerinden okuma, örneği değiştirmeden döndürür.
Bir API anahtar yolu beklediğinde, ancak öğeyi olduğu gibi kullanmak istediğinizde işe yarar; örneğin sayıları kendilerine göre sıralarken.
let numbers = [3, 1, 2]
let identity = \Int.self
for n in numbers {
print(n[keyPath: identity])
}Anahtar Yollarını Karşılaştırma
Anahtar yolları Hashable ve Equatable türündedir. Aynı türdeki aynı özelliğe işaret eden iki anahtar yolu eşittir; bu nedenle bunları kümelerde saklayabilir veya sözlük anahtarı olarak kullanabilirsiniz.
Bu, bir özelliği bir etikete veya biçimlendiriciye eşleyen tablolar oluşturmak için kullanışlıdır.
struct Person {
let name: String
let age: Int
}
let labels: [PartialKeyPath<Person>: String] = [
\Person.name: "Full Name",
\Person.age: "Years Old"
]
print(labels[\Person.age] ?? "unknown")Hızlı Kontrol: Anahtar Yolu Üzerinden Okuma
Bir özelliği anahtar yolu üzerinden nasıl okuyacağınız konusundaki anlayışınızı sınayın.
Özet: Anahtar Yolu Temelleri
Anahtar yollarının temellerini öğrendiniz:
- Bir anahtar yolu ters eğik çizgi, kök tür, nokta ve özellik adıyla yazılır; özelliği okumadan onu açıklar.
- Bir örnek üzerindeki
[keyPath:]alt indis gösterimini kullanarak bir değer okuyun. - Yollar iç içe özelliklere zincirlenebilir ve hesaplanan özellikleri hedefleyebilir.
KeyPath,PartialKeyPathveAnyKeyPath, esneklik karşılığında tür güvenliğinden ödün verir.- Anahtar yolları birer değerdir: onları saklayabilir, aktarabilir, karşılaştırabilir ve sözlük anahtarı olarak kullanabilirsiniz.
Sırada, koleksiyon işlemlerini çok daha kısa ve öz hâle getirmek için anahtar yollarını kullanacaksınız.
struct Person {
let name: String
let age: Int
}
let path = \Person.age
let gina = Person(name: "Gina", age: 48)
print("Read via key path: \(gina[keyPath: path])")Sıkça Sorulan Sorular
“KeyPath Temelleri” dersi ücretsiz mi?
Evet — “KeyPath Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“KeyPath Temelleri” dersinde ne öğreneceğim?
Özelliklere birinci sınıf değerler olarak başvurun. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“KeyPath Temelleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- KeyPath Temelleri
- Koleksiyonlarda KeyPaths Kullanımı
- Yazılabilir ve Başvuru KeyPaths'leri
- @dynamicMemberLookup