我是一名Swift初学者,请温柔点...
我在给函数赋值参数时遇到了麻烦。
我已经定义了这个结构体:
struct dispatchItem {
let description: String
let f: ()->Void
init(description: String, f: @escaping ()->()) {
self.description = description
self.f = f
}
}
我在一个名为 MasterDispatchController
的类中使用它,如下所示:
class MasterDispatchController: UITableViewController {
let dispatchItems = [
dispatchItem(description: "Static Table", f: testStaticTable),
dispatchItem(description: "Editable Table", f: testEditableTable)
]
func testEditableTable() {
//some code
}
func testStaticTable() {
//some code
}
然后,我在代码中有一个表格视图,可以分发给被单击的任何函数(不仅仅是上面代码中展示的两个函数,但这不重要),就像这样:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
dispatchItems[indexPath.row].f()
}
所以...编译器对此不满意。在我定义dispatchItems的let语句时,它说:
无法将'(MasterDispatchController) -> () -> ()'类型的值转换为预期的参数类型'() -> ()'
我想...好吧...我不确定我完全理解这个错误,但看起来像是编译器想知道回调函数将来自哪个类。我能理解它为什么需要这个信息。因此,我有点盲目地按照编译器给我的模式进行更改,将我的struct更改为:
struct dispatchItem {
let description: String
let f: (MasterDispatchController)->()->Void
init(description: String, f: @escaping (MasterDispatchController)->()->()) {
self.description = description
self.f = f
}
}
很好,编译器很高兴,但是当我尝试使用dispatchItems[indexPath.row].f()
调用函数时,它会显示:
缺少第1个参数
这个函数没有参数,所以我感到困惑了...
我想也许它正在询问我有关对象实例的问题,这在某种程度上是有意义的... 在我的示例中,这将是"self",因此我尝试了dispatchItems[indexPath.row].f(self)
,但是然后我得到了一个错误:
表达式解析为未使用的函数
所以我有点卡住了。
如果这是一个愚蠢的问题,请原谅。谢谢您的帮助。
switch indexPath.row {case 0: callFunc1() case1: callFunc2() default: CallSomeDefault()}
并以这种方式调用所需的函数。因为将函数传递给模型是错误的。 - JuicyFruit