Swift 像闭包一样使用选择器参数

2024-02-17

我只是想知道是否可以将函数传递给按钮操作(通常是选择器)。

例如,通常我会说:

UIBarButtonItem(title: "Press", style: .Done, target: self, action: "functionToCall")

func functionToCall() {
    // Do something
}

但我想知道是否可以做类似的事情:

UIBarButtonItem(title: "Press", style: .Done, target: self, action: {
    // Do Something
})

我想这样做的原因是因为我的函数非常简单,而且看起来它会更整洁,更像 Swift 一样,因为他们强调闭包。


这是 Swift 3 的更新解决方案。

class BlockBarButtonItem: UIBarButtonItem {
    private var actionHandler: (() -> Void)?

    convenience init(title: String?, style: UIBarButtonItem.Style, actionHandler: (() -> Void)?) {
        self.init(title: title, style: style, target: nil, action: #selector(barButtonItemPressed))
        self.target = self
        self.actionHandler = actionHandler
    }

    convenience init(image: UIImage?, style: UIBarButtonItem.Style, actionHandler: (() -> Void)?) {
        self.init(image: image, style: style, target: nil, action: #selector(barButtonItemPressed))
        self.target = self
        self.actionHandler = actionHandler
    }

    @objc func barButtonItemPressed(sender: UIBarButtonItem) {
        actionHandler?()
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 像闭包一样使用选择器参数 的相关文章

随机推荐