gpt4 book ai didi

ios - Swift 4.0 中的选择器

转载 作者:行者123 更新时间:2023-11-28 07:50:52 24 4
gpt4 key购买 nike

我想知道是否有更“快速 4”的方式来创建选择器和调用函数?我想单击状态栏按钮以从函数中调用简单的打印命令,但这是过时的还是有更有效的“快速”方法来执行此操作?

button.action = #selector(myFunction)

@objc func myFunction (sender: NSStatusBarButton) {
print("Hi")
}

最佳答案

我不确定是否有任何好方法可以避免在幕后使用目标/操作模式,但您绝对可以尝试隐藏它。

我个人对所有回调都使用 ReactiveSwift,所以我永远不必使用这种笨拙的 objc 语法。另一种方法是将其隐藏在扩展中。例如,您可以尝试以下操作:

extension UIButton {

private struct AssociatedKeys {
static var TouchUpClosure = "touchUpClosure"
}

internal var onTouchUpInside: ((UIButton) -> ())? {
get {
return objc_getAssociatedObject(self, &AssociatedKeys.TouchUpClosure) as? (UIButton) -> ()
}

set {
objc_setAssociatedObject(
self,
&AssociatedKeys.TouchUpClosure,
newValue as? (UIButton) -> (), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC
)
button.action = #selector(executeTouchUpInside:)
}
}

@objc func executeTouchUpInside(sender: UIButton) {
self.touchUpInside(sender)
}
}

它允许您使用“更快速”的语法(没有 @objc#selector):

button.onTouchUpInside = { _ in print("Hi") }

免责声明 - 我没有检查过这个确切的代码是否编译,这篇文章更多的是关于分享一个想法。

关于ios - Swift 4.0 中的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com