首页 > 解决方案 > addAction 和 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")
}

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

标签: swiftuikit

解决方案


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

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


推荐阅读