gpt4 book ai didi

swift - 将多个闭包作为参数快速传递给函数

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

所以我试图将两个闭包传递给一个创建 subview 的函数。将闭包作为参数并调用它们的函数的主要部分如下:

///goButton and cancelButton are class level variables

var goButton = UIButton(type: .system)

var cancelButton = UIButton(type: .system)


func addSubViewWithAction(_ titleString:String, _ button1Text:String, _ button2Text:String, closureYes:@escaping ()->(), closureNo:@escaping ()->()) {

goButton.actionHandle(controlEvents: UIControlEvents.touchUpInside,
ForAction:closureYes)

cancelButton.actionHandle(controlEvents: UIControlEvents.touchUpInside,
ForAction:closureNo)
}

这是我尝试调用它的方式。

addSubViewWithAction("Hide Penguin here?","Yes","Cancel", closureYes: switchPlayers, closureNo: deletePenquin)

问题是它为两个按钮都调用了 deletePenguin 函数,而从不调用 switchPlayers 函数。

下面是我如何通过 subview 向主视图添加按钮

    //v here is a UIView object
//Add all buttons and text to subView
v.addSubview(titleField)
v.addSubview(goButton)
v.addSubview(cancelButton)
v.layer.cornerRadius = 8

//Add subView to main view
window.addSubview(v)

最佳答案

问题是 actionHandle 以某种方式静态工作,所以它会用最近的分配覆盖任何以前的分配。

您可以执行以下操作(此处没有完整的代码解决方案,只有伪代码):

  • 子类 UIButton
  • 添加一个实例变量来保存要执行的闭包
  • 添加一个实例(帮助程序)函数作为事件的目标并在内部执行上面的闭包
  • 创建一个将要执行的闭包作为参数的函数。里面,
    • 使用提供的闭包分配您的实例变量
    • 调用 addTarget(_:action:for:) 并将您的辅助函数作为目标

如果你想支持不同的 UIControlEvent,你必须稍微改进这些步骤,也许通过使用将事件映射到闭包的字典。

关于swift - 将多个闭包作为参数快速传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51074771/

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