【发布时间】:2020-09-03 22:20:16
【问题描述】:
我已经阅读了我可以在这里找到的所有关于函数数组的帖子——你可以做到这一点。我估计。但是没有一篇文章实际上展示了如何使用它们(至少不是我想要做的)。这就是我想要的 - 它们都可以采用相同的参数,但这不是必需的。
这篇文章结束了,我可以循环执行每个函数(满足第一个目标)。
https://stackoverflow.com/a/24447484/11114752
但是...如果我想通过引用执行单个函数怎么办? 换句话说,如何只调用引用的 Arity2 函数 - 例如:
// None of these work (with or without the parameter labels)
funcs.Arity2(n: 2, S: "Fred) // value of type [MyFuncs] has no member .Arity2
funcs[Arity2](n: 2, S: "Fred") // no exact matches to call in subscript
funcs[.Arity2](n: 2, S: "Fred") // Cannot call value of non-function type...
let fn = funcs.first(where: { a whole ton of permutations here to try to match Arity2 }) -- a whole lotta frustrating nope...
请帮忙!我尝试过的没有任何效果。预编译器只是兜圈子,提出不成功且无法编译的建议。
编辑: 首先是数组的原因是我将有相当多的功能,并且我不知道它们都是什么提前。本质上,我想要一种插件类型的架构。我可以添加到函数列表中(最好是在类的扩展中,但这是另一个问题..),而不是更改按顺序执行每个函数的处理循环。
【问题讨论】:
-
您所遵循的答案没有必要复杂(除非您正在做的事情比您描述的要复杂得多)。检查以下对同一问题的答案(该页面上的许多答案都与 1.0 之前的 Swift 相关):stackoverflow.com/a/26416417/97337 写下您尝试调用的几个函数的示例。 没有数组你会怎么做呢?只需对它们进行硬编码并显示您想要调用的内容,我们将展示如何将其转换为数组。
-
我尝试了 pawello2222 的回答 - 它不能与函数一起正常工作,这让我很沮丧。
-
@Rob - 这是我的替代方案,也是我现在正在使用的。第一个目标 - 执行所有函数(按数组顺序 - 第一个函数第一个,第二个,...)。第二个目标 - 按名称单独访问。所以,看起来我需要两个数组,除非命名的数组还保持它们声明的顺序(需要一些测试)。
-
测试确认订单似乎按预期维持