# Binding

```swift
TextField(_ titleKey: LocalizedStringKey, text: Binding<String>, ..)

Picker(_ titleKey: LocalizedStringKey, selection: Binding<SelectionValue>, ..)

Slider(value: Binding<BinaryFloatingPoint>, ..)

..
```

Kullandığımız temel bileşenlerin constructor'ına baktığımızda da dikkatimizi çekmiştir, argüman olarak `Binding` türünden parametreler beklenir.&#x20;

Bu şu demek;

```swift
@State var text: String
TextField("Placeholder", text: $text)
```

Textfield için örneklendirelim, kullanıcı klavyeden tuşlara bastıkça yani TextField içindeki text düzenlendikçe, bizim *text* kısmına argüman olarak geçtiğimiz değer de otomatik olarak bizim için güncellenir yani bir nevi çift taraflı müdahaleye açık (two way connection).\
Bu senaryoyu UIKit ile yapmak isteseydik `TextField` ın `valueChanged` eventini manuel olarak dinlememiz gerekirdi, ama `SwiftUI` ile birlikte bu hizmeti ücretsiz olarak alabiliyoruz.

{% hint style="info" %}
Parent View de bulunan bir `@State` değişkenini Child View içinde düzenlemek için, Child View de onu `@Binding` olarak işaretlemeliyiz.
{% endhint %}

```swift
struct PlayButton: View {
    @Binding var isPlaying: Bool
    
    var body: some View {
        Button(action: {
            self.isPlaying.toggle()
        }) {
            Image(systemName: isPlaying ? "pause.circle" : "play.circle")
        }
    }
}

struct PlayerView: View {
    var episode: Episode
    @State private var isPlaying: Bool = false
    
    var body: some View {
        VStack {
            Text(episode.title)
            Text(episode.showTitle)
            PlayButton(isPlaying: $isPlaying)
        }
    }
}

```

`PlayButton` a basıldığında, `PlayerView` `isPlaying` state değişkenini güncelliyor.
