swift - 无法将类型 'GenericTableViewController<T, U>' 的值分配给类型 'GenericTableViewController<GenericTableViewCell<_>, _>'

标签 swift uitableview generics types generic-programming

我有通用 TableView Controller

class GenericTableViewController<T: GenericTableViewCell<U>, U>: UITableViewController {
    // some stuff
}

cellForRowAt indexPath

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as? GenericTableViewCell<U>
        cell?.controller = self // Cannot assign value of type 'GenericTableViewController<T, U>' to type 'GenericTableViewController<GenericTableViewCell<_>, _>'
        // some stuff
        return cell ?? GenericTableViewCell<U>(style: .default, reuseIdentifier: nil)
    }

在我的通用 TableView 单元类中,我有一个属性controller,它代表通用 TableView Controller 本身:

class GenericTableViewCell<U>: UITableViewCell {
    var item: U?
    var controller: GenericTableViewController<GenericTableViewCell<U>, U>

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        controller = GenericTableViewController()
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    @objc func handleMarkAsFavorite() {
        controller.favoriteCell(cell: self)
    }

    lazy var starButton: UIButton = {
        let button = UIButton(type: .system)
        button.setImage(#imageLiteral(resourceName: "fav_star"), for: .normal)
        button.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
        button.addTarget(self, action: #selector(handleMarkAsFavorite), for: .touchUpInside)
        return button
    }()    
}

我想将我的 TableView 单元格与 TableView Controller 链接到收藏夹单元格,然后将它们呈现在另一个 Controller (也称为收藏夹)中。但是,我收到错误消息,告诉我由于类型问题,它无法将单元与其 Controller 连接

Cannot assign value of type 'GenericTableViewController<T, U>' to type 'GenericTableViewController<GenericTableViewCell<_>, _>'

我是通用的新手,所以我很乐意提供任何帮助!

最佳答案

您可以按如下方式转换 self

cell?.controller = self as! GenericTableViewController<GenericTableViewCell<U>, U>

关于swift - 无法将类型 'GenericTableViewController<T, U>' 的值分配给类型 'GenericTableViewController<GenericTableViewCell<_>, _>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51725452/

相关文章:

swift - 从 Firestore 填充 UITableView

ios - UITableviewCell 图像大小在单击单元格时发生变化?

generics - Kotlin - 不尊重泛型类型参数

Java泛型问题,修改约束?

ios - 为什么每次向上滑动 UITableView 都会运行 cellForRowAt 函数?

swift - typealias 可以 Codable 吗?

arrays - SourceKit 在创建 2D 字符数组时崩溃

ios - CoreData 中具有多个上下文的并发性

ios - 如何在滚动时在类似于 google+ 的 tableview 中添加动画?

java - 设计一个在数组中存储可比对象的通用类