我有一个包含函数的通用类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立即抱怨道:“CellClass?不是Void的子类型“
你知道为什么吗?(请注意,队列在其他情况下正常工作)

最佳答案

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
    })
}

关于swift - 从调度队列访问通用类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25310740/

10-12 14:36