Skip to content

Instantly share code, notes, and snippets.

@bannzai
Last active December 23, 2022 11:55
Show Gist options
  • Save bannzai/eddad9f0b0ce622ca22ba993e7fe413a to your computer and use it in GitHub Desktop.
Save bannzai/eddad9f0b0ce622ca22ba993e7fe413a to your computer and use it in GitHub Desktop.
SwiftUI search with text example
import SwiftUI
import Combine
struct SearchView: View {
@StateObject var observer = SearchTextObserver()
var body: some View {
VStack {
TextField("TextField", text: $observer.searchText)
.onChange(of: observer.throttleText) { text in
print("Call API with \(text)")
}
}
.padding()
}
}
class SearchTextObserver: ObservableObject {
@Published private(set) var throttleText = ""
@Published var searchText = ""
private var subscriptions = Set<AnyCancellable>()
init() {
$searchText
.throttle(for: .seconds(1), scheduler: DispatchQueue.main, latest: true)
.sink(receiveValue: { [weak self] t in
self?.throttleText = t
})
.store(in: &subscriptions)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
SearchView()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment