我正在尝试创建一个可以显示不同类型单元格的相当通用的UITableView实现。我正在使用关联类型来指定数据源类型,单元格类型等。我的大部分工作都非常好,但是我在实现子类化时遇到了一些麻烦。我在下面展示的代码量最少,以获得重点。
这是我的高级架构:
protocol DGTableViewAble {
typealias DGTableViewItemType
...
var items: [DGTableViewItemType] { get set }
}
class DGTableView: UITableView, DGTableViewAble {
typealias DGTableViewItemType = User
var items: [DGTableViewItemType] = [] { ... }
}
class DGPostsTableView: DGTableView {
typealias DGTableViewItemType = Post
}
...
当我将User
个对象数组分配给任何DGTableView
实例时,事情很有效。例如,这很有效:
var users: [User] = [...]
var userTableView: DGTableView
userTableView.items = users
然而,当我尝试这个时:
var posts: [Post] = [...]
var postsTableView: DGPostsTableView
postsTableView.items = posts
我收到错误:
Cannot assign a value of type '[Post]' to a value of type '[DGTableViewItemType]'
似乎编译器在确定相关类型时遇到问题,因为我已经设置好了。有什么想法吗?有关改进架构的任何建议吗?
答案 0 :(得分:1)
Post没有声明可见协议?
class DGPostsTableView: DGTableView, DGTableViewAble {
typealias DGTableViewItemType = Post
}
它还必须符合所述协议。也许将不需要的协议组件标记为可选可以解决您的问题?
答案 1 :(得分:1)
您未在[{1}}的类界面中继承DGTableViewAble
:
DGPostsTableView