로그인, 찜, 차단과 같이 서버와 통신이 필요한 버튼은 터치할 때마다 통신이 일어나기 때문에 불필요한 통신이 발생하거나, 의도하지 않은 동작이 발생한다.
// 찜 하기 버튼 action
@objc func pickPressed() {
// Firebase와 통신
}
유저의 연속된 버튼 터치
import UIKit
extension UIButton {
static let throttleDelay: Double = 0.5
func throttle(delay: Double = UIButton.throttleDelay) {
isEnabled = false
let deadline = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: deadline) { [weak self] in
guard let self = self else { return }
self.isEnabled = true
}
}
}
// 찜 하기 버튼 action
@objc func pickPressed(sender: UIButton) {
sender.throttle()
// throttle 이후 서버와 통신
}
유저가 버튼을 터치하면 버튼을 비활성화하고, 1초 뒤에 버튼을 활성화하는 throttle을 적용해서 해결!