我有一个包含函数的通用类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/