Key-path (anahtar yolu) — nesnelerin özelliklerine "referansla" erişimi güvenli bir şekilde sağlamak için kullanılan bir mekanizmadır. Özelliklere erişim için tam bir tip güvenliği sağlar:
struct Person { var name: String var age: Int } let kp = \Person.name let john = Person(name: "John", age: 30) print(john[keyPath: kp]) // "John"
WritableKeyPath — sadece okumakla kalmayıp, özellikleri değiştirmeye de imkan verir:
var person = Person(name: "Foo", age: 22) let namePath: WritableKeyPath<Person, String> = \Person.name person[keyPath: namePath] = "Bar"
Kullanım:
İncelikler:
WritableKeyPath için, nesne (yapı) değişken (var) olmalıdır.Soru: "Sıradan bir KeyPath aracılığıyla sınıf özelliklerini değiştirebilir miyiz (yoksa WritableKeyPath mı gerektirir)? KeyPath ve ReferenceWritableKeyPath arasındaki farklar nelerdir?"
Cevap: Key path üzerinden bir özelliğin değerini değiştirmek için WritableKeyPath gereklidir. Sınıflar için ayrıca, referans tipler için key-path ile özellikleri değiştirmeye olanak tanıyan ReferenceWritableKeyPath da bulunmaktadır.
class User { var score = 0 } let user = User() let path: ReferenceWritableKeyPath<User, Int> = \User.score user[keyPath: path] = 42 // TAMAM
Hikaye
Büyük bir projede, tablo odaklı UI'da sıradan KeyPath ve WritableKeyPath karıştırıldı — bir modelin özelliğini KeyPath aracılığıyla değiştirmeye çalıştılar ve runtime hatası aldılar.
Hikaye
Generic formların oluşturulmasında, değerlerin bağlanması için KeyPath kullanıldı, ancak metotları keypath olarak yansıtmaya çalıştılar, bu da derleme hatasına ve kodun aşırı karmaşıklaşmasına yol açtı.
Hikaye
Geliştirici, sınıflar için ReferenceWritableKeyPath eklemeyi unuttu, bu da UI ile veri modeli arasında iki yönlü bağlanmayı engelledi: değerler UI'de güncellenirken, model sabit kaldı.