如何在 Swift 中将选择器函数作为参数传递?



>我有一个标准的视图控制器,它有以下选择器:

@objc func finished() {
//Do Something here
}

我有一个名为ButtonFactory的外部类,看起来像这样:

class ButtonFactory {
static let shared = ButttonFactory()
func createButton(functionParameter: () -> Void ) -> UIButton {
let button = UIButton()
button.addTarget(self, action: #selector(functionParameter), for: .touchUpInside)
return button
} 
}

在我的视图控制器中,我像这样调用createButton:

ButtonFactory.shared.createButton(functionParamter: self.finished)

但是上面的代码没有编译说:"#selector"的参数不能引用参数"函数参数"。

是否可以在 Swift 5 中将选择器函数作为参数传递?

您可以使用选择器传递函数:

class ViewController: UIViewController {
@objc func finished() {
//Do Something here
}
}
<小时 />
class ButtonFactory {
static let shared = ButtonFactory()
func createButton(_ action: Selector) -> UIButton {
let button = UIButton()
button.addTarget(self, action: action, for: .touchUpInside)
return button
}
}
<小时 />
let button = ButtonFactory.shared.createButton(#selector(ViewController.finished))

请注意,还应将视图控制器实例传递给方法,而不是将目标设置为 ButtonFactory 共享实例。

最新更新