Swift使用没有泛型的动态类型引用创建类型数组

时间:2016-01-02 16:53:37

标签: ios arrays swift

鉴于此功能:

func createEmptyArrayWithViewType(viewType: UIView.Type) -> [UIView] {
    /// Create array of viewType views
}

如何使用该功能创建空数组? viewType参数可以是任何UIView子类(UIImageView,UILabel等)。是否可以不使用泛型?

更新

好的,我认为更多的背景会有所帮助。

我想要构建的是一个重用队列,它几乎完成了UITableView和UICollectionView所提供的功能。

这是我班上当前的代码:

class SwipeView: UIView {
  private var _reuseQueues = [String: [MatchSwipeCell]]()

  ...
}


/// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
//MARK: - Reuse queue
/// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
extension SwipeView {
  func registerClass(cellClass: SwipeCell.Type, forCellWithReuseIdentifier identifier: String) {
    if let reuseQueue = _reuseQueues[identifier] {
      fatalError("Reuse identifier '\(identifier)' was already registered with class '\(reuseQueue.dynamicType.Element.self)'")
    }

    /// This is not working!
    _reuseQueues[identifier] = [cellClass]()
  }

  func dequeueReusableCellWithReuseIdentifier(identifier: String) -> SwipeCell {
    guard var reuseQueue = _reuseQueues[identifier] else {
      fatalError("No class was registered for the reuse identifier '\(identifier)'")
    }

    if let cell = reuseQueue.first {
      reuseQueue.removeFirst()
      cell.prepareForReuse()
      return cell
    }

    return reuseQueue.dynamicType.Element(reuseIdentifier: identifier)
  }

  private func enqueueCellForReuse(cell: SwipeCell) {
    _reuseQueues[cell.reuseIdentifier]?.append(cell)
  }
}

1 个答案:

答案 0 :(得分:1)

等等,你只想创建一个UIView的空数组?您的功能将如下所示:

func createEmptyArrayWithViewType(viewType: UIView.Type) -> [UIView] {
    return []
}
不需要

viewType参数。您可以在此数组中添加所需的任何视图(UIImageViewUILabel等。)

var array = createEmptyArrayWithViewType(UIImageView)
array.append(UIImageView())
array.append(UILabel())

如果你希望让函数返回[UIView],你最终会得到UIView s的空数组