SwiftUI, Apple tarafından sunulan tüm iOS işletim sistemlerinde uygulama geliştirmeyi daha kolay ve etkileşimli hale getiren kullanıcı arayüz framework’üdür. SwiftUI ile basit ve yeniden kullanılabilir kod kullanarak kullanıcı arayüzleri oluşturabilirsiniz.
Bu blog yazısında, SwiftUI’ın temel kavramlarını tartışacak ve SwiftUI ile uygulama geliştirmenize yardımcı olacak örnek kodlar sunacağım.
SwiftUI Nedir?
SwiftUI, deklaratif bir sözdizimi (syntax) kullanarak uygulama arayüzlerini oluşturmanıza olanak sağlayan bir kullanıcı arayüz aracıdır. Apple çıkardığı bu framework ile Apple ekosistemindeki cihazlara da aynı anda aynı tasarımı sunma imkanı veriyor. Bunu UIKit framework ile de yapabiliyorduk fakat birtakım şeyleri göz önüne almak gerekiyordu. SwiftUI ile daha az kod ile daha fazla efektif uygulamalar geliştirme imkanı buluyoruz.
SwiftUI ile hayatımıza giren en büyük yenilik yazdığımız kodu canlı olarak görebilmemizdir. Canlı ön izleme modu sayesinde yazdığımız kodu simülatörü build etmeden aynı anda görebiliyoruz. Bu hem arayüzü hem de uygulamayı daha hızlı şekilde oluşturmamızı sağlıyor.
SwiftUI’deki Temel Kavramlar
Views
View’ler herhangi bir SwiftUI uygulamasının ana unsurudur. View’ler buton, label ve daha karmaşık bileşenler gibi kullanıcı arayüz öğelerini temsil ederler. Bir view oluşturabilmek için “View” protokolünü kullanıyoruz.
Hadi gelin şimdi ilk örnek “View”’i oluşturalım.
Modifiers
Modifier (Değiştirici)’ler tüm viewlerin görünümünü ve davranışını değiştirirler. Bu şekilde view’lere padding, yazı tipi, boyutu, rengi gibi özellikler kazandırabilirsiniz.
Örnek modifier kullanımı:
Veri Akışı
SwiftUI uygulamalarımızda veri akışını (data flow) yönetmek ve güncellemek için framework’un bize sunduğu @State, @Binding ve @ObservedObject property wrappers’ları kullanabiliriz.
@State: Bu property wrapper View’ın bağlı olduğu değerleri tutar. Basit bir örnekle anlatmaya çalışalım.
Burada TextField @State değişkeni olan “text”’i bağlar (bind). TextField’e yazı yazıldığı zaman “text” değişkeninin değeri değişir ve ContentView’in yeniden çizilmesine sebep olur. Bu şekilde sadece tek bir View içerisinde kullanacağımız zaman @State property wrapper’ı kullanabiliriz. Şimdi değişikliği de görmek adına bir Text elemanı ekleyelim:
Burada text değişkeninin değeri değiştikçe ekran yeniden çiziliyor ve text değişkeninin değeri ekrana yazdırılıyor.
@Binding: Bu property wrapper View’ler arası veri aktarmayı sağlar. İki yönlü bir iletişim vardır. Aşağıdaki gibi bir örnekle detaylı açıklayalım:
Burada ParentView text adında @State değişkenine sahip. ChildView ise yine text adında @Binding değişkenine sahiptir. ChildView “text” değişkeninin sahibi değil sadece ParentView’deki “text” değişkenini temsil etmekle görevlidir. Özetle; ParentViewdeki “text” değişkenin değeri ChildView’e göndermek istersek @Binding property wrapper’ını kullanmalıyız.
@StateObject ve @ObservedObject
StateObject ve ObservedObject’ten önce ObservableObject’ten bahsedelim. ObservableObject protokolü model classlarımızın View içerisinde kullanılmasını sağlar. Böylelikle modelimizde bir değişiklik olduğunda view tekrar çizilir.
@Published property wrapper ise modelimizdeki değişkenlerin değeri değiştiğinde View’n tekrardan çizilmesi gerektiğini söyler.
StateObject ve ObservedObject view içerisinde ObservableObject oluşturmak ve yönetmek için kullanılır. Örnek ile anlatmak gerekirse:
Burada InnerView içerisinde buton oluşturuyoruz. Butona her dokunduğumuzda modelimizin score property’si değerini bir artırıyoruz. Bu şekilde bir model kullanacaksak ve nesnemizden bir örnek oluşturmayacaksak modelimizi View içerisinde @ObservedObject olarak tanımlıyoruz. Aksi halde ContentView’deki gibi nesnemizin bir örneğini oluşturmamız gereken durumda View içerisinde @StateObject olarak tanımlıyoruz.
Bu blog yazımızda SwiftUI’a temel seviyede giriş yaptık. Görüldüğü üzere SwiftUI Apple platformlarındaki kullanıcı arayüzlerini oluşturmak için modern ve güçlü bir frameworktür. SwiftUI, deklaratif yaklaşım sunması, karmaşık arayüz geliştirmelerini kolaylaştırması, oldukça fazla özelleştirme seçenekleri sunması adına gün geçtikçe popüler hale gelmektedir.
Fakat şu an için minimum iOS versiyonu 16 altında olan uygulamalar için SwiftUI ile uygulama geliştirmek oldukça zahmetli ve yorucu olacaktır. Çünkü UIKit ile yapılan bazı basit işlemler iOS 16 versiyonun altında ya yapılamamakta ya da çok fazla uğraştırmaktadır. Örneğin klavyenin üzerine bir toolbar eklemek ve stabil çalışmasını sağlamak çok zordur. Şu an için olmasa da yakın gelecekte tüm iOS projelerimiz SwiftUI dönüşümü gerçekleştireceğini düşünüyorum.
Herkese iyi kodlamalar dilerim. 😊
Kaynakça:
- Apple. (n.d.). SwiftUI | Apple Developer Documentation. Apple Developer Documentation. https://developer.apple.com/documentation/swiftui
- Hacking with Swift – learn to code iPhone and iPad apps with free Swift tutorials. (n.d.). Hacking with Swift. https://www.hackingwithswift.com/
- Medium. (n.d.). Medium. https://www.medium.com