Binding
https://developer.apple.com/documentation/swiftui/binding
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.
Bu şu demek;
@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.
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.
Last updated
Was this helpful?