swift - Swift5如何将函数传递给向量/函数
问题描述
我试图为我的按钮/动作制作一个生成器。我怎么能这样做?>
var buttonPairs = [
[“Reset”,handleReset] // handleHeightReset - function in current self
]
for data in buttonPairs{
mButtonPtrs[data[0] as! String] = UIButton()
mButtonPtrs[data[0]!.addTarget(self, action: #selector(data[1]) , for: UIControl.Event.touchUpInside)
}
我不断收到错误:
swift Argument of ‘#selector’ does not refer to an ‘@objc’ method, property, or initializer
解决方案
你可以试试这个——
import Foundation
import UIKit
struct ButtonConfig {
let title: String
let action: Selector
}
class ViewController: UIViewController {
@objc func handleReset() {}
var buttonConfigs: [ButtonConfig] = [
.init(title: "Reset", action: #selector(handleReset))
]
var buttonsCache: [String: UIButton] = [:]
func prepareButtonsCache() {
for config in buttonConfigs {
let button = UIButton()
button.addTarget(self, action: config.action, for: .touchUpInside)
buttonsCache[config.title] = button
}
}
}
推荐阅读
- javascript - 如何将行添加到第一个空行?带有 chrome 扩展的 Google 电子表格 API
- angular - 执行可信脚本
- security - Odoo 安全,防止登录用户使用 jsonrpc 访问未受保护的表?
- ffmpeg - 我可以从视频中提取音频剪辑(一个单词)并使用 FFMPEG/libvlcsharp 在同一视频的不同点/时间线上插入吗?
- visual-studio - 如何在 Azure 测试管理器上“批量克隆”测试用例?
- javascript - 花括号 {} 内的函数调用
- javascript - TypeError:无法设置未定义的属性“xxx”
- logstash - 如何在 Logstash 中获取部分 Filebeat 源文件名
- python - Python / Pandas - 使用第一个/最后一个函数聚合数据框而不分组
- python - 如何在管理面板中刷新内联表单?