Swift'te Property Wrappers - 2

Herkese selamlar, bu yazı, "Property Wrappers in SwiftUI 1" adlı yazımın devamıdır. Bir önceki yazıma bu linke tıklayarak ulaşabilirsiniz. Birinci yazımda, property wrappers'ın genel olarak ne olduğundan bahsederken, bu yazıda nasıl kullanıldıklarını ve en yaygın olan türlerinden bahsediyor olacağım.



 

Nasıl Kullanılırlar?


Property wrappers kullanmaya başlamadan önce, manipüle edeceğiniz verinin, hangi tipte olduğuna karar vermelisiniz. Yani veriniz primitive-ilkel tip mi (Int,String,Bool) yoksa nesne (object) tipinde mi olacak? Eğer veriniz ilkel tipte ise @State veya @Binding, veriniz nesne tipinde ise @StateObject veya @ObservedObject kullanmanız daha uygun olacaktır. Bu yazıda sadece @State , @Binding , @ObservedObject ve @StateObject wrapper'larını anlatacağım. Bunların dışında daha bir çok property wrapper bulunmakta. Yazının sonuna ekleyeceğim linkten hepsine ulaşabilirsiniz.

Hangi wrapper'ı kullanmanız gerektiğini görsel olarak açıklayan bu siteye bakmanızı tavsiye ederim. https://swiftuipropertywrappers.com/

@State

State property wrapper'ı sadece lokal veriler için kullanılır. Yani @State sadece oluşturulduğu View içerisinde kullanılır ve başka viewların bu değişkene ihtiyacı olmaz. Property wrapperların güzel özelliklerinden biri ise, wraplediğiniz veriye bir observer(gözlemci) ve subject(izleyici) koyarak, veri değiştiği zaman ekranın kendini güncellemesini sağlayarak, değişen veriyi hemen göstertebilmesidir. Aşağıda bulunan örnek, bir önceki yazımda göstermiş olduğum bir örnek.


12. satırda bulunan kodun başındaki @State property wrapper'ını silersek, XCode'un bu kodu çalıştırmadığını görebilirsiniz. @State wrapper'ı, bu değişkeninin değerinin zaman içerisinde değiştirilebilmesini sağlarken aynı zamanda bu değişkene bir observer ve subject ikilisi sağlayarak, bu değişkenini değeri her değiştiğinde, View'ın kendini yenileyerek, güncel veriyi göstermesini sağlar.


GitHub linki : Burada

@State property wrapper sadece lokal veriler için kullanıldığından bu property' i private olarak tanımlamanızı tavsiye ederim. Böylece bu verinin sadece bulunduğu View' a ait olduğunu daha iyi anlayabiliriz.


Veri değiştiği zaman View' ın güncellendiğini göstermek için örnek.


GitHub linki : Burada


13.satırda bulunan dizi birkaç ismin bulunduğu bir dizi ve 25.satırda yazan fonksiyon, parametre olarak gelen diziden rasgele bir eleman döndürüyor. Butona tıklandığında bu fonksiyon çalışıyor ve nameArray' den rasgele gelen bir ismi nameString' e atıyor. Yani butona her tıklandığında nameString içerisindeki değer değişiyor ve başındaki @State sayesinde bu değişimleri, ekranda da görebiliyoruz.