Swift:协议方法作为目标动作中的动作

Ric*_*hiy 3 delegation uibutton target-action ios swift

我想要一个协议:

protocol CameraButtonDelegate: class {
    func cameraButtonDidPress(_ sender: UIButton)
}
Run Code Online (Sandbox Code Playgroud)

因此,我可以将任何客户端分配给按钮,例如:

cameraButton.addTarget(delegate, action: #selector(cameraButtonDidPress), for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)

但是,它不能编译,因为我必须在中指定特定功能action,例如:

cameraButton.addTarget(delegate, action: #selector(AAPLViewController.cameraButtonDidPress), for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)

如果我想通过一个按钮将多个客户作为目标,该如何解决此问题?

vad*_*ian 5

如果您制定协议,它应该可以工作 @objc

@objc protocol CameraButtonDelegate: class {
    func cameraButtonDidPress(_ sender: UIButton
}
Run Code Online (Sandbox Code Playgroud)

并将选择器指定为协议方法

cameraButtonDidPress.addTarget(delegate, action: #selector(CameraButtonDelegate.cameraButtonDidPress), for: .touchUpInside)
Run Code Online (Sandbox Code Playgroud)