将函数存储在数组中

时间:2018-11-05 11:44:55

标签: ios swift

我有一个名为update的函数,如下所示:

func update(animated: Bool, completion: @escaping (Bool) -> ()) {

}

现在,我想在数组中将对该函数的多个调用排队。我该怎么办?

我需要一个具有以下类型的数组:

var queue = [???]()

并附加类似queue.append(???)的函数,但我无法弄清楚。

2 个答案:

答案 0 :(得分:2)

从字面上看,我在发布此内容后刚刚解决了我自己的问题。答案是这样的:

private var queue = [(Bool, (Bool) -> ()) -> ()]()

queue.append(update)

答案 1 :(得分:2)

要简化实现方式,只需复制函数签名:

(animated: Bool, completion: @escaping (Bool) -> ())

并将其用于声明 typealias

typealias Update = (animated: Bool, completion: (Bool) -> ())

您会看到语法错误为:

  

@escaping属性只能在函数参数位置使用

在删除@escaping的建议下,执行以下操作:

typealias Update = (animated: Bool, completion: (Bool) -> ())

这时,您将可以使用Update类型别名来识别适当的类型。

因此,您可以将queue数组声明为:

var queue = [Update]()

请注意,在声明类型别名时,您可以避免将参数命名为:

// this is sufficient
typealias Update = (Bool, (Bool) -> ())

此外

要知道什么是类型别名,可以检查:When to use typealias?(以及答案中提到的story