将通用类型声明为可调用

时间:2014-08-24 09:19:23

标签: generics swift

我想做这样的事情:

class Foo<BlockT> {
    var blocks = Array<BlockT>
    func callTheBlocks() {
        for block in blocks {
            block()
        }
    }
}

然而,这引起了

  

无效使用&#39;()&#39;调用非功能类型的值&#39; BlockT&#39;。

如何声明BlockT可以调用,或者是&#34;函数类型&#34;?

2 个答案:

答案 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()