我想做这样的事情:
class Foo<BlockT> {
var blocks = Array<BlockT>
func callTheBlocks() {
for block in blocks {
block()
}
}
}
然而,这引起了
无效使用&#39;()&#39;调用非功能类型的值&#39; BlockT&#39;。
如何声明BlockT
可以调用,或者是&#34;函数类型&#34;?
答案 0 :(得分:2)
试试这个。 T
是块的返回类型,如果它没有返回任何内容,则可以是Void
class Foo<T> {
var blocks = Array<(Void -> T)>()
func callTheBlocks() {
for block in blocks {
block()
}
}
}
答案 1 :(得分:2)
对于没有参数且没有返回值的块/闭包,您可以使用 内置的
typealias dispatch_block_t = () -> Void
示例:
class Foo {
var blocks = Array<dispatch_block_t>()
func callTheBlocks() {
for block in blocks {
block()
}
}
}
let foo = Foo()
foo.blocks.append { println("Foo") }
foo.blocks.append { println("Bar") }
foo.callTheBlocks()