我想定义一个函数,该函数提供一些参数,返回UITableViewCell的特定实现,如下所示:

func cellClassFromCellType<T: UITableViewCell>(cellType: CellType, atIndexPath: NSIndexPath) -> T.Type {
    switch cellType
    case someEnum: return NotificationCell
    default: return UITableViewCell
}


这样我就可以做这样的事情:

let cellType = cellClassFromCellType(.Test, atIndexPath: NSIndexPath())
let cell = cellType(style: UITableViewCellStyle.Default, reuseIdentifier: "")


但是通过上述实现,我得到以下错误:

Cannot convert return expression of type 'NotificationCell.Type' to return type 'T.Type'


我什至不知道上面的实现方向是否正确,因此任何输入都会有所帮助。



最好我也想在protocol中定义此功能,因此,也将非常感谢您对定义此协议的一些帮助。

最佳答案

Swift是一种静态类型的语言,因此所有类型都必须在编译时固定。一个函数不能根据运行时确定的因素动态地从一种类型返回另一种类型。 Source

既然您已经询问过协议,Swift还不支持通用的参数化协议,但是您可以阅读here有关可能的解决方法。

07-27 20:32