gpt4 book ai didi

Swift 如何在方法内部创建 Action

转载 作者:行者123 更新时间:2023-11-28 06:34:13 25 4
gpt4 key购买 nike

是否可以在方法内部创建一个 Action 。

func hello(){
button.addtarget(self.,#selector(itemTocall),forControlEvents:TouchInside)

let itemTocall = {
print("hello")
}

}

最佳答案

不是完全按照您的意思,但从广义上讲,是的。首先,请记住目标/行动是在关闭之前很多很多年制定的。所以在功能上真的没有重叠。 Action 必须是一个特定的选择器,它必须是静态存在的。但是,那时我们可以为所欲为。例如,我们可以像这样简单地构建它:

class Something: NSObject {

let button = UIButton()

var dispatchFunc: (UIButton) -> Void = {_ in}

func dispatch(button: UIButton) {
dispatchFunc(button)
}

func hello(){
dispatchFunc = {_ in
print("hello")
}

button.addTarget(self, action: #selector(dispatch), for: .touchUpInside)
}
}

现在,dispatchFunc 被重写为您想要的任何行为,dispatch 仅作为中间人存在。这种技术当然可以显着扩展。你可以有一个按钮(或按钮 ID)到闭包的字典,这样许多不同的按钮可以动态地改变它们运行的​​内容(即使它们都指向相同的 dispatch 函数)。或者你可以有一个闭包数组,以便可以执行多个操作。随心所欲。

(还有许多其他方法可以实现这一点,例如使用 ObjC 运行时。您可以覆盖消息调度并处理甚至没有支持方法的任意选择器,但我建议使用像上面这样的带有闭包的简单方法.)

关于Swift 如何在方法内部创建 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39496583/

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