我有要在表格视图中显示的项目列表。并在单击每个 项目 我想触发一个方法。 I-E
var menuItems = [LeftMenuItem]() // -> Define at top of vie controller
func populateLeftMenuData() { // populating data in viewDidLoad
var leftMenuItem = LeftMenuItem(imageName: "flagIcon", cellLabel : "Home" , method : "home")
menuItems.append(leftMenuItem)
leftMenuItem = LeftMenuItem(imageName: "flagIcon", cellLabel : "Logout" , method : "logout")
menuItems.append(leftMenuItem)
}
这就是数据在表视图中的填充方式。在每一行我 显示"单元格标签",然后单击我想调用的单元格 "方法"。
我正在做的是
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let leftMenuItem = menuItems[indexPath.row]
perform(Selector(leftMenuItem.method!))
}
func logout () {
print("logout")
}
func home () {
print("Home")
}
但是单击单元格,它说无法识别的选择器发送到一个 实例。同样的事情在 xCode 8 swift 3 上工作正常。
只需将@objc
放在使用 Selector
s 调用的所有方法之上:
@objc func logout() {
print("logout")
}
@objc func home() {
print("Home")
}
在 Swift 4 中,@objc
推理非常有限。我怀疑在 Swift 中动态创建一个Selector
会是一个很好的策略。