从调度队列访问泛型类型

时间:2014-08-14 14:34:33

标签: swift

我有一个包含函数的泛型类A:

func addItem<item:T>->T? {

} 

我用CellClass初始化这个类。我从addCell()调用addItem。接受以下内容没有问题。

func addCell(cell:CellClass, t:A<CellClass>) {
    t.addItem(cell) 
}

但这不起作用:

func addCell(cell:CellClass, t:A<CellClass> {
    dispatch_async(queue, {
       t.addItem(cell)
    })

Xcode立即抱怨:&#34; CellClass?不是Void&#34; 的子类型 有什么想法吗? (注意队列正常工作)

1 个答案:

答案 0 :(得分:3)

Swift执行"implicit return" from single-line closures,因此您的代码实际上被解释为:

func addCell(cell:CellClass, t:A<CellClass> {
    dispatch_async(queue, {
       return t.addItem(cell)
    })
}

错误是因为闭包有Void返回类型,但addItem正在返回CellClass?。您可以通过在以后添加单个return行来解决此问题,以解决此问题:

func addCell(cell:CellClass, t:A<CellClass> {
    dispatch_async(queue, {
        t.addItem(cell)
        return
    })
}