İçeriğe geç

Swift 3 ile #keyPath kullanımı

Swift 3

Merhabalar bu yazımda Swift 3 ile birlikte gelen yeni bir yardımcı fonksiyon #keyPath() den bahsedeceğim.

Swift 2 ‘den sonra gelen #selector() yardımcı fonksiyonu bildiğimiz gibi sınıf içerisinde fonksiyonları kolayca seçip gesture’lerde bu fonksiyonu tetikliyorduk. Sınıf ismini ve fonksiyonu nesne olarak seçmek kod okunaklığı içinde oldukça yararlı oldu. Aynı özellikde keyPath nesneleri için getirildi önceden String formatta nesne ismini yazıyorduk şimdi ise sınıf adı yardımıyla erişim sağlayabiliyoruz.

keyPath meselesini detaylı olarak observer konusunda anlatacağım çok önemli ve güzel bir konu. Burada şimdilik kullanımına örnek vereceğim. Ancak kısa olarak değinecek olursam seçtiğimiz keyleri kontrol edip işlem yapabilir bu keyin değişim hareketine görede olaylar tetikleyebiliriz.

Örnek olarak İOS‘da nesneye animasyon eklerken en son parametre string tipinde bir key yazmamızı ister bu key o animasyonun belirtecidir. Bu animasyonu silmek istediğimizde keyine göre yokederiz.

Aşağıda yazdığım örneği inceleyebilirsiniz

@objc class Person:NSObject {
    
    var name:String!
    var age:Int!
    var gender:String!
    var job:String!
    
    
    init(name:String,age:Int,gender:String,job:String){
        self.name = name
        self.age = age
        self.gender = gender
        self.job = job
    }
    
    func keyPersonName() -> String {
        
        return #keyPath(Person.name)
        
    }
    
}

var obj = Person(name: "Kenan", age: 21, gender: "Male", job: "İOS Developer")
var kpath = #keyPath(Person.name)

print(obj.value(forKey:kpath)!) //  Kenan
obj.name // Kenan

obj.name == obj.value(forKey: kpath) as! String  // True
obj.addObserver(self, forKeyPath: #keyPath(Test.name), options: .new, context: &mycontext)

Not: İOS içerisindeki forKey ile forKeyPath aynı şey değildir. forKey String tipinde kullanılır ancak forKeyPath nesne yönelimlidir sınıf içerisindeki değişkenleri seçmeniz gerekir. Bu yüzden #keyPath içerisine nesne yüklemeniz gerek aksi halde hata verecektir ve nesne NSObject‘den türeyen bir sınıfa bağlı olmalı.

Tarih:SwiftSwift 3

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca