Ios swift 按功能替换选择器

Ios swift replace selector by function

我只想在按钮点击上写一两行代码like

print("Button Clicked")

为此我不想创建一个单独的函数并通过选择器调用 作为

action: #selector(BtnKlkFnc(_:))

我想简化一下

action: { action in print("Button Clicked")}

我也试过了

#selector({print("Button Clicked")})

谁能帮我简化一下

我是 Whosebug 的新手,还没有足够的声誉,所以请为我的问题投票,这样我就可以为你的答案投票

简答:你不能那样做。按钮操作是 target/action 内置于 Cocoa/Cocoa 触摸中的机制的一部分。它基于选择器,您必须创建一个命名方法并使用它的选择器。您不能将 Swift 闭包用作按钮操作。

编辑:

请注意,可以创建具有闭包 属性 的 UIButton 的自定义子类,并在点击按钮时调用该闭包。你要做的是让按钮的 init 方法将自己设置为 touchUpInside 事件的目标并调用按钮的方法,该方法反过来调用你的闭包(在确保闭包 属性 不是 nil 之后.)

编辑#2:

请注意,创建 UIButton 的自定义子类非常简单,它将自己设置为按钮按下的目标并保持关闭。

这是一个示例实现:

class ClosureButton: UIButton {

    var buttonClosure: ((UIButton) -> Void)?
    
     required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.addTarget(self, action: #selector(handleTap(_:)), for: .touchUpInside)
        }
    
    @objc func handleTap(_ sender: UIButton) {
        if let buttonClosure = buttonClosure {
            buttonClosure(sender)
        } else {
            print("No button closure defined")
            return
        }
    }
}

在你的视图控制器中:

override func viewDidLoad() {
    super.viewDidLoad()
    button.buttonClosure = { _ in
        print("You tapped the button")
    }
}