Swift - 以相同的方式配置不同的单元格

时间:2017-10-15 14:00:29

标签: swift uitableview generics protocols associated-types

嘿,我得到了ConfigurationType协议

protocol ConfigurationType {}

和我自己的细胞类

class ConfigurableCell<T: ConfigurationType>: UITableViewCell {
    func configure(with config: T) {}
}

我的所有单元都继承自ConfigurableCell,我想创建我的tableView将使用的CellModules。

protocol CellModule {
    associatedtype Config: ConfigurationType
    associatedtype Cell: ConfigurableCell<Config>
    var config: Config { get set }
}
extension CellModule {
    init(_ config: Config) {
        self.config = config
    }
    func dequeueCell(_ tableView: UITableView) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell() as Cell
        cell.configure(with: config)
        return cell
    }
}

目标是像这样为单元格创建模块

struct GoalTitleCellModule: CellModule {
    typealias Cell = GoalTitleCell
    var config: GoalTitleConfiguration
}

但xcode抱怨“Type'GraceTitleCellModule'不符合协议'CellModule'”。

enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:1)

使ObjectiveM C可见CellModule协议并将GoalTitleCellModule类型更改为class将解决您的问题。

看看这里:https://bugs.swift.org/browse/SR-55