SwiftUI: AnyView
AnyView, belirli bir görünüm hiyerarşisinde kullanılan görünüm türünü değiştirmeye izin verir. Gelin bu yapıyı hep birlikte yakından inceleyelim.
Hadi Başlayalım
Yeni bir SwiftUI projesi açalım ve ContentView struct yapımızı aşağıdaki gibi kodlayalım.
struct ContentView: View {
private var isLoggedIn: Bool = false var body: some View {
if isLoggedIn {
return Text(“Giriş Yaptı”)
} else {
return Text(“Giriş Yapmadı”)
}
}
}
isLoggedIn adında bir değişken oluşturduk. Bu değişkenin türü Bool ve true yada false değerlerini tutacak.
if isLoggedIn {
...
}
isLoggedIn eğer true ise Text(“Giriş Yaptı”) nesnesi geri döndürülecek.
eğer false is Text(“Giriş Yapmadı”) nesnesi geri döndürülecek.
Uygulamamızı Çalıştıralım
Uygulamamıza baktığımızda Giriş Yapmadı yazısını görüyoruz. Bunun sebebi;
private var isLoggedIn: Bool = false
değişkenin değeri false. Bunu true yapalım.
private var isLoggedIn: Bool = true
Harika if — else yapımız çalışıyor.
Örneğin isLoggedIn true olduğu zaman “Giriş Yaptı” yazmasın bir Image göstersin istiyoruz. Hadi bunu yapalım.
struct ContentView: View { private var isLoggedIn: Bool = false var body: some View { if isLoggedIn { return Image(systemName: "hand.thumbsup.fill")
.resizable()
.frame(width: 100, height: 100) } else { return Text(“Giriş Yapmadı”) }
}
}
Image(systemName: "hand.thumbsup.fill")
.resizable()
.frame(width: 100, height: 100)
Image nesnesi oluşturduk ve systemName: parametresine bir SFSymbols ikon adını girdik.
.resizable() fonksiyonu ile ikonumuzu boyutlandırılabilir hale getirdik.
.frame() fonksiyonu ile yükseklik ve genişlik verdik.
Hatamıza Geri Dönelim
Dönüş türlerinin bir birleriyle eşlemediğini bize bildiren bir hata ile karşı karşıyayız. Bu sorunu AnyView ile çözeceğiz.
struct ContentView: View {
private var isLoggedIn: Bool = true var body: some View { if isLoggedIn { return AnyView(
Image(systemName: “hand.thumbsup.fill”)
.resizable()
.frame(width: 100, height: 100)
) } else { return AnyView(Text(“Giriş Yapmadı”)) }
}
}
Sorunu Nasıl Çözdük?
AnyView içerisinde oluşturulan nesnenin türü unutulmaya zorlanır. Bu sayede aynı türden oluşturulmuş nesneler gibi davranır.
Önemli
AnyView’i kullanmanın performans maaliyeti vardır. Bu yüzden sık sık kullanılmaması gerekir. Bunun yerine Group düzenini kullanabilirsiniz.
Aşağıdaki linkten projenin bitmiş haline ulaşabilirsiniz.
Bir makalemizin daha sonuna geldik. Bu makalemizde AnyView yapısının kullanımını ve nasıl çalıştığını ele aldık. Gelecek olan makalemizde Group düzenini ele alacağız. İyi kodlamalar dilerim… 🤓