İçeriğe geç

SwiftUI ile Avoiding AnyView

Merhabalar bu yazımda SwiftUI ile birlikte yarattığımız sınıflara nesne gönderirken AnyView cast etme işlemine gerek kalmadan göndermeyi göstereceğim.

Örneğin Row View sınıfına parametre olarak bir Image, View, Field vs. nesnesi göndermek istediğimiz zaman AnyView cast edip gönderiyoruz. Bu işlemi ortadan kaldırmak ve direkt olarak nesneyi göndermek oldukça kolay.

struct ContentView: View {
    var body: some View {
        VStack(spacing: 20) {
            
            ListRowNonAvoid(title: "Item", accessoryView: AnyView(Image(systemName: "globe").resizable().frame(width: 24, height: 24)))
                .padding()
            
            Spacer()
        }
    }
}

Yukardaki gibi kullanım hem okunaksız hemde gereksiz.

struct ListRow<Item: View>: View {
    
    var title: String
    var accessoryView: Item
    
    var body: some View {
        HStack(spacing: 10) {
            accessoryView
            Text(title)
                .font(.headline)
            Spacer()
        }
    }
}

Yukardaki gibi generic type constraints yapısı uyguladığımız zaman direk olarak nesneyi inject edebiliyoruz.

struct ContentView: View {
    var body: some View {
        VStack(spacing: 20) {
            
            ListRow(title: "Item", accessoryView: Image(systemName: "globe").resizable().frame(width: 24, height: 24))
                .padding()
            
            Spacer()
        }
    }
}

 

Tarih:SwiftUI

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Copyright © 2020 Kenan Atmaca