UITableViewDiffableDataSource Nedir, Nasıl Kullanılır ?
Herkese Selamlar,
Bu yazımda UITableViewDiffableDataSource konusuna değineceğim.

Sırasıyla:
- UITableViewDiffableDataSource Nedir ve Neden kullanılır ?
- UITableViewDiffableDataSource Avantajları
- UITableViewDiffableDataSource Kullanımı
UITableViewDiffableDataSource Nedir ve Neden Kullanılır
UITableView sınıfının verileri yönetmek için kullanılanUITableViewDataSource
yerini alan bir sınıftır.
Tüm veri kaynağını silip tekrar oluşturmamak, animasyonlu şeklinde eklenen ve silinen veriyi göstermek için kullanırız. Ayrıca bu sınıf ile sadece veri kaynağı yönetimine odaklanarak geri kalan işleri UITableViewDiffableDataSource
sınıfına rahatlıkla bırakabiliriz.
UITableViewDiffableDataSource Avantajları
- Karmaşık yapıları daha kolay oluşturmak. ✅
- Hücre tanımlamalarını ve güncellemelerini daha kolay ve hatasız gerçekleştirmek. ✅
- Kodun okunabilirliğini arttırmak. ✅
- Sadece veriye odaklanarak, geri kalan işleri
UITableViewDiffableDataSource
sınıfına bırakmak. ✅
UITableViewDiffableDataSource Kullanımı
ViewController
Yukardaki adımları inceleyelim:
1- ViewController sınıfımız için ViewModel nesnesi oluşturuldu.
2- TableView eklendi.
3- viewDidLoad fonksiyonu altında addSubViews() fonksiyonu ile tableView ekrana pinlendi ardından configureContents() fonksiyonu ile UIBarButtonlar eklendi. Bunları silme ve ekleme işlemlerinde kullanacağız.
Yukarda görüldüğü gibi tableview data yönetimi viewcontroller tarafından artık yapılmamaktadır. Bu işlemleri ViewModel içinde halletmekteyiz. Bu şekilde ViewControllerı data yönetiminden uzak ve daha kolay yönetilebilir hale getirmekteyiz.
UITableViewDiffableDataSource
- Dikkat edilmesi gereken Section ve Itemlar için Hashable protokolü uygulanma şartı aranmaktadır.
Section ve Item
- Yukarda kullanacağımız section ve item için tanımlamalar yaptık. Sadece 1 tane section kullanacağımız için main isminde seciton tanımladık.
ViewModel
- Yukardaki adımları inceleyelim:
1- Snapshot sunulan verileri temsil eder. Bu yüzden ilk olarak snapshot nesnesini oluşturduk. Generic yapıda olduğu için Section ve Item belirttik.
2- DataSource nesnesi oluşturuldu aynı şekilde Section ve Item belirtildi.
3- Verileri tuttuğumuz items isminde liste oluşturuldu ve ilk gösterim için elemanlar eklendi.
4- Bu adımda tableview için DataSource kurulumu yapılmaktadır. Bunun kurulumunu viewmodel tarafında yapmayı tercih etmekteyim isterseniz ViewController içinde yapabilirsiniz. Closure tarafından {tableView, IndexPath ve ItemType} döndürülür. Datasource için kullanılacak olan section’ı belirtmenin ardından, hangi section için hangi veriyi kullanmak istediğimizi belirtiriz. Tüm adımlardan sonra dataSource kaynağını güncelliyoruz.
6- Rastgele bir sayı üretiyoruz. Ardından bu sayıyı önce veri dizisine ardından snapshota ekliyoruz. Bu işlemlerden sonra mutlaka datanın değiştiğini bildirmemiz için updateDataSource() fonksiyonunu çağırıyoruz.
7- Rastgele bir sayıyı veri dizisinden siliyoruz. Silinen elemanı snapshot’tan silip tekrardan data değişikliği için updateDataSource() fonksiyonunu çağırıyoruz.
8- Her veri değişiminde dataSource güncelliyoruz.
DiffableDataSource vs UITableViewDataSource
- Projeyi aşağıdaki github linkinden indirebilirsiniz.
Bir sonraki yazıya kadar sağlıcakla kalın 🙌🙂