我有一个名为update的函数,如下所示:
func update(animated: Bool, completion: @escaping (Bool) -> ()) {
}
现在,我想在数组中将对该函数的多个调用排队。我该怎么办?
我需要一个具有以下类型的数组:
var queue = [???]()
并附加类似queue.append(???)
的函数,但我无法弄清楚。
答案 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)