addAction 和 addTarget 有什么区别

what is the difference between addAction and addTarget

我在考虑按钮点击事件,我们有不同的选择

对于基本操作来说

button.addTarget(self, action: #selector(buttonClicked), for: .touchUpInside)

@objc private func buttonClicked () {
    print("button clicked")
}

但是我们可以做同样的事情,而无需使用以下

通过 objc 函数或选择器
extension UIControl {
    func addAction(for controlEvents: UIControl.Event = .touchUpInside, _ closure: @escaping()->()) {
        addAction(UIAction { (action: UIAction) in closure() }, for: controlEvents)
    }
}

button.addAction(for: .touchUpInside) { [weak self] in
      guard let self = self else {return}
      self.buttonClicked()
}

func settingsClicked () {
    print("settings clicked")
}

我查看了 apple 的 addAction 文档,在那里找不到太多内容,我想知道两者之间的区别以及我应该更多地使用哪个

addTarget(_:action:for:) 方法使用 target/action,旧的基于 Objective-C 的动态调度方法,您可以在其中提供目标对象和选择器。

如果您的目标是 iOS ≥14,您可以使用较新的 addAction(_:for:),它允许您提供 UIAction 对象,其中包括一个闭包。它更现代,但不适用于 iOS <14.