# TabView

```swift
// Tab geçişlerinin gerçekleştiğini gözlemlemek için
// bir dummy view oluşturalım.
struct SampleTabView: View {
    
    let title: String
    
    var body: some View {
        Text(title)
    }
    
}

struct TabContainerView: View {
    var body: some View {
        TabView {
        
            SampleTabView(title: "Tab - 1")
                .tabItem {
                    Image(systemName: "1.circle.fill")
                    Text("Tab-1").bold()
                }
            
            SampleTabView(title: "Tab - 2")
                .tabItem {
                    Image(systemName: "2.circle.fill")
                    Text("Tab-2").bold()
                }
            
            SampleTabView(title: "Tab - 3")
                .tabItem {
                    Image(systemName: "3.circle.fill")
                    Text("Tab-3").bold()
                }
        }
    }
}
```

![](https://1761232408-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M5Upqg27mOVmaED1CFL%2F-M5vHEJnux8HNAdlJGfb%2F-M5vLabAo76eBh65d4wO%2FScreen%20Shot%202020-04-27%20at%2014.16.27.png?alt=media\&token=f7e9a3dd-12bd-4635-99a7-61ede41611e3)

**tabItem** düzenleyicisini kullandığımızda `Image` ve `Text` bileşenlerini bizim için otomatik olarak yerleştirir.

#### Ekstra

Sekmeler (Tab (View)) arasında **@EnvironmentObject** kullanarak veri paylaşımı yapabiliriz.

```swift
// Demo için bir dummy class oluşturalım.
class User: Identifiable, Codable {
    var id = UUID()
    var name = ""
}

// EnvironmentObject
class UserService: ObservableObject {
    @Published var users: [User]

    init () {
        self.users = []
    }
}

struct TabContainerView: View {
    var userService = UserService()
    
    var body some: View {
        SampleTabView { .. }
            .environmentObject(userService)
            // Paylaşmak istediğimiz veriyi
            // Bu senaryoda UserService, bu şekilde environmentObject'e
            // argüman olarak geçiyoruz.
    }
}

// Tab View
struct SampleTabView: View {
    @EnvironmentObject var userService: UserService
    // Tab View içinde de bu şekilde, referans olarak geçtiğimiz
    // UserService'e tekrar erişebiliriz.
    
    var body: some View { .. }
}
```

`@EnvironmentObject` kullandığımız zaman SwiftUI, `View` oluşturulduğunda bu o objenin de hazır olduğuna emin oluyor
