Debouncing is a programming practice used to ensure that a function is not called too frequently. It’s especially useful for managing text input in UI applications to improve performance and reduce unnecessary processing. Below is an example of how to debounce text input in a UIKit application using Swift.
import UIKit
class ViewController: UIViewController {
private var timer: Timer?
private let debounceDelay: TimeInterval = 0.5
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
}
@objc private func textFieldDidChange(_ textField: UITextField) {
timer?.invalidate() // Cancel the previous timer
timer = Timer.scheduledTimer(withTimeInterval: debounceDelay, repeats: false) { [weak self] _ in
self?.performSearch(query: textField.text ?? "")
}
}
private func performSearch(query: String) {
// Perform search functionality here
print("Searching for: \(query)")
}
}
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?