【发布时间】:2018-11-05 11:44:54
【问题描述】:
我有一个名为 update 的函数,如下所示:
func update(animated: Bool, completion: @escaping (Bool) -> ()) {
}
现在我想在一个数组中对这个函数的多个调用进行排队。我该怎么做?
我需要一个类型的数组:
var queue = [???]()
并追加queue.append(???)之类的函数,但我想不通。
【问题讨论】:
我有一个名为 update 的函数,如下所示:
func update(animated: Bool, completion: @escaping (Bool) -> ()) {
}
现在我想在一个数组中对这个函数的多个调用进行排队。我该怎么做?
我需要一个类型的数组:
var queue = [???]()
并追加queue.append(???)之类的函数,但我想不通。
【问题讨论】:
为了简化如何实现它,只需复制您的函数签名:
(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) -> ())
进一步:
要了解 typealias 是什么,您可以查看:When to use typealias?(以及答案中提到的 story)
【讨论】:
在发布此内容后,实际上只是解决了我自己的问题。答案是这样的:
private var queue = [(Bool, (Bool) -> ()) -> ()]()
和queue.append(update)
【讨论】: