关联类型错误:无法将类型'[SpecificType]'的值分配给类型'[NameOfTypeAlias]'的值

时间:2015-04-28 03:44:39

标签: ios uitableview swift generics

我正在尝试创建一个可以显示不同类型单元格的相当通用的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]'

似乎编译器在确定相关类型时遇到问题,因为我已经设置好了。有什么想法吗?有关改进架构的任何建议吗?

2 个答案:

答案 0 :(得分:1)

Post没有声明可见协议?

class DGPostsTableView: DGTableView, DGTableViewAble {
  typealias DGTableViewItemType = Post
}

它还必须符合所述协议。也许将不需要的协议组件标记为可选可以解决您的问题?

答案 1 :(得分:1)

您未在[{1}}的类界面中继承DGTableViewAble

DGPostsTableView