如何创建函数数组?实现按钮点击仅触发对应单个函数
解决按钮点击时才触发对应函数的问题
你的问题出在数组存储的是函数执行后的结果,而非函数本身。当你写a()时,代码会立即执行这个函数并把返回值(这里是空元组())存入数组,所以初始化数组时a()和b()就被调用了。
修改方案:
- 将数组类型改为存储无参无返回值的函数类型
[() -> Void],用来保存函数引用 - 数组中直接写入函数名
a、b(不要加括号,加括号会立即执行) - 按钮点击时,取出数组中的函数并调用(加括号执行)
修改后的完整代码:
func a() { print("a") } func b() { print("b") } // 存储函数引用的数组 let arrayOfActions: [() -> Void] = [a, b] @objc func buttonAction(sender: UIButton!) { // 根据tag取出函数并执行 arrayOfActions[sender.tag - 1]() }
这样修改后,只有当按钮被点击时,才会根据对应的tag取出函数并触发执行,初始化数组时不会再提前调用a()和b()。
内容的提问来源于stack exchange,提问作者user25462420
相关产品推荐
相关产品推荐

