Handling Number Key’s in Web Service Responses with Swift CodingKey

Taha Muhsin Yılmaz
Arcelik IoT Labs
Published in
3 min readDec 2, 2019

--

Herkese merhabalar. Bu yazıda servisten çekilen verilerin parse edilmesi sırasında oluşturulan modellerde key olarak numara dönmesi halinde parse etme işleminin nasıl yapılacağından bahsedilecektir.

İster Alamofire olsun ister URLSessionTask olsun hangi web servis client’ı kullanırsanız kullanın servisten çekilen JSON verinin parse edilmesi için swift Decodable protocol’ü kullanılarak servis modelini oluşturmak gerekir. Bunu oluşturmadan dictionary ile casting yapılarak da parse işlemi yapılsa da Decodable ile model oluşturmak daha sağlıklı ve kolay bir yöntemdir.

Decodable İle Servis Modeli Oluşturma

Örnek JSON yapısı

Yukarıdaki JSON dosyasını web servis ile çekeceğimizi düşünelim. Decodable ile oluşturduğumuz web servis model struct yapısı aşağıdaki gibi olmalıdır.

Örnek JSON Modeli

Yukarıda da görüldüğü gibi her JSON key’i için bir değişken oluşturulup, JSON Decoder yardımı ile decode edilen JSON bu struct yapısına cast edilir ve bunu sonucunda bu struct yapısının her bir değişkeni ile istenilen anahtarın değerine erişilebilecektir. Dikkat edilmesi gereken nokta her değişken adının JSON yapısındaki anahtarlar ile aynı olmak zorundadır. Yoksa parse işleminde exception fırlatır ve parse işlemi başarısız olur. Peki ya JSON yapısı içerisinde integer içerirse. Yani ya JSON yapısı aşağıdaki gibi olursa…

Görüldüğü gibi bu yapıda JSON anahtarları string fakat numara olarak girilmiş. Yukarıdaki servise modeli oluştururken bu keyleri elbetteki değişken olarak tanımlayamayız. Yani let 300: String? diye bir değişken tanımlama gibi bir durum söz konusu olmadığından burada yardımımıza Swift Standart Kütüphanesi’nde yer alan CodingKey protocol’ü yetişiyor.

Swift CodingKey ile model oluşturma

CodinKey swift standart kütüphanesinde bulunan ve decode işlemlerinde keyleri isteğimiz başka bir değişken ile değiştirebilmemizi sağlayan bir protocoldür. Yukarıda verilen JSON yapısını kullanarak bir proje oluşturup bu jSON ile gelen 300, 400 ve 500 anahtarları ile gelen değerleri bir UITableView’da gösterelim.

Öncelikle yukarıdaki JSON dosyasını projenin içerisine atıyoruz. Bu işlemi networking kullanmamak kısayoldan JSON dosyasını almak için kullanıyoruz.

Daha sonra UIStoryboard üzerinde bir table view oluşturup cell’leri yukarıdaki yapıya uygun olacak şekilde dizayn ediyoruz. Label’ların 3 tanesini yukarıdaki değerleri göstermek için kullanacağız.

Daha sonra JSON yapısını CodingKey kullanarak struct ile modelliyoruz.

Daha sonra Bundle.main.path üzerinde JSON dosyamıza erişip, JSONDecoder class’ı yardımı ile JSON verisini yukarıda oluşturduğumuz ServiceModel struct’ına decode ediyoruz.

Daha sonra decode ettiğimiz bu yapıyı yukarıda oluşturduğumuz ServiceModel değişkenine set ediyoruz ve set olur olmaz tableView’ımızı yediden yükleyerek verilerin gösterilmesini sağlıyoruz.

Son olarak TableView ve TableViewCell ayarlarımızı yapıyoruz. Bu işlemde verilerin Cell içerisindeli Label’lara atanması işlemlerini gerçekleştiriyoruz.

Bu işlemle birlikte kodumuzu bitirmiş oluyoruz ve numara olarak gelen 300, 400 ve 500 anahtarlarının değerlerini CodingKey yardımı ile kolayca parse ederek arayüzde göstermiş oluyoruz.

Bu yazıda CodingKey ile JSON verilerinin anahtar değerlerini değiştirme işlemi gösterildi. Numaralar üzerinden örnekleme yapıldı. Fakat bu işlemin farklı değerler için de gerçekleştirilebileceği unutulmamalıdır. Mesela servisten userFullName şeklinde gelen anahtarı siz daha anlaşılır bir şekilde aynı yöntemi kullanarak fullName olarak değiştip kullanabilirsiniz. Umarım faydalı olur. İyi kodlamalar.

--

--