SwiftUI: @Published

SwiftUI’da veri transferi için en çok kullanılan “property wrapper”lardan biri olan @Published elemanını nasıl kullanabileceğinizi öğrenin!

Can Balkaya
TurkishKit
2 min readJun 6, 2021

--

SwiftUI ve Combine gibi Apple’ın yeni tanıttığı teknolojiler ile birlikte “reactive” programlama Apple platformlarında uygulama geliştiricileri arasında gittikçe daha da popülerleşiyor. Bu makalede de SwiftUI ile veri akışı oluştururken işimize fazlasıyla yarayan -ve “reactive” programlamayı anımsatan- @Publishedproperty wrapper”ını inceleyeceğiz.

@Publishedproperty wrapper”ı SwiftUI’da en çok kullanılan araçlardan biridir: Onun sayesinde UI elemanlarının içerisindeki değerleri anlık olarak değiştirebiliyoruz.

@Published elemanı WWDC19’da SwiftUI’ın tanıtılmasından bu yana kullanılıyor ama aradan geçen iki senelik sürede hem Apple’ın yaptığı geliştirmeler hem de üçüncü parti geliştiricilerin ve toplulukların bu elemanı en iyi şekilde nasıl kullanabileceğimize dair içerikleriyle kullanım alanları genişledi.

SwiftUI’ın protokol tabanlı programlamaya pek uygun olmaması sebebiyle SwiftUI uygulamaları geliştirirken tanımladığımız veri yapıları için @Published elemanını kullanmak şart oluyor.

İlerleyen makalelerde @Publishedproperty wrapper”ının bütün kullanım alanlarına değiniyor olacağız.

İlk önce en basitten başlayalım. Makalenin başında @Published ile tanımlanan değerlerin UI elemanlarında anlık olarak değiştirildiğinden bahsetmiştim. Yani bu değerler her değişikliğe uğradığında bu değeri kullanan bütün UI elemanları yeniden çiziliyorlar.

Örnek olarak bir tane ObservableObject protokolünü kullanan bir obje oluşturalım ve onun içine bir değişken tanımlayalım.

ObservableObject protokolünü kullanmamızın sebebi, “Team” objesini bir View yapısının içerisinde tanımlayacağımızda o View yapısının sürekli olarak o tanımladığımız objeyi dinlemesini sağlamaktır. Yalnız, teamMemberCount değişkenini şu an bir body değerinin içerisinde kullanırsak ve bu değişkenin değerini değiştirirsek -örneğin teamMemberCount değerini 1’e yükseltelim- UI içerisinde hiçbir değişiklik göremeyiz.

İşte bu yüzden teamMemberCount değişkeninde @Published elemanını kullanmalıyız. Böylece teamMemberCount değişkeninin değerini değiştirdiğimiz an UI objelerimiz de değişmiş olacaktır.

Başka bir şey yapmanıza gerek yok–@Published elemanı, tanımlanmış olduğu değişkenlere bir willSet “property observer”ı ekler, böylece değişiklikler otomatik olarak UI elemanlarına gönderilir.

Görebildiğiniz gibi, @Published elemanı isteğe bağlıdır-varsayılan değişkenler kendiliğinden yenilenmediğinden anlık olarak değişmesini istediğiniz özelliklerinizi @Published ile tanımlamalısınız. Bu demek oluyor ki @Published depolama için de kullanılabilir. İlerleyen yazılarımızda buna değineceğiz.

Bizi daha yakından takip etmek istiyorsanız, sosyal medya hesaplarımıza aşağıdan ulaşabilirsiniz!

Twitter | Instagram | Facebook

--

--