Swift:如何使Generic Class符合委托协议,其方法具有Generic Type参数?

时间:2018-02-08 09:42:18

标签: swift generics

我有一个委托协议,其方法要求上有一个Generic Type参数,我有一个Generic Class,我希望它符合该委托。

问题在于我无法使该课程满足要求。

protocol ListDelegate: class {
  func list<T>(_ list: List<T>, didUpdatedItems items: [T])
}

class List<T> {
  var items: [T] {
    didSet {
      delegate?.list(self, didUpdatedItems: items)
    }
  }
  weak var delegate: ListDelegate?

  init(items: [T]) {
    self.items = items
  }
}

class ListWrapper<U>: ListDelegate {
  let list: List<U>
  var items: [U]

  init(list: List<U>) {
    self.list = list
    items = list.items
  }

  func list<T>(_ list: List<T>, didUpdatedItems items: [T]) {
    self.items = items
  }
}

上述代码示例会导致cannot assign value of type '[T]' to type '[U]'错误,但如果我从需求方法实现中删除<T>通用类型,则会导致错误Type 'ListWrapper<U>' does not conform to protocol 'ListDelegate'

如何使Generic Class符合该委托?

0 个答案:

没有答案