ReusableKit

Swift CocoaPods Build Status Codecov

用于 Cocoa 的通用可重用组件。目前支持 UITableViewUICollectionView

概览

之前 🤢

collectionView.register(UserCell.self, forCellWithReuseIdentifier: "userCell")
collectionView.dequeueReusableCell(withReuseIdentifier: "userCell", for: indexPath) as! UserCell
  1. 硬编码的字符串标识符可能导致人为错误。
  2. 应该避免强制向下转型。

之后 😊

let reusableUserCell = ReusableCell<UserCell>()
collectionView.register(reusableUserCell)
collectionView.dequeue(reusableUserCell) // UserCell
  1. 字符串标识符使用 UUID 自动生成并存储在结构体中。
  2. 泛型可以静态地确保出队单元格的类型。

使用示例

建议将可重用类型定义为 enumstruct 中的静态常量。

UITableView

// 1. define
enum Reusable {
  static let headerView = ReusableCell<SectionHeaderView>()
  static let userCell = ReusableCell<UserCell>()
}

// 2. register
tableView.register(Reusable.headerView)
tableView.register(Reusable.userCell)

// 3. dequeue
tableView.dequeue(Reusable.headerView, for: indexPath)
tableView.dequeue(Reusable.userCell, for: indexPath)

UICollectionView

// 1. define
enum Reusable {
  static let headerView = ReusableCell<SectionHeaderView>()
  static let photoCell = ReusableCell<PhotoCell>()
}

// 2. register
collection.register(Reusable.headerView, kind: .header)
collection.register(Reusable.photoCell)

// 3. dequeue
collection.dequeue(Reusable.headerView, kind: .header, for: indexPath)
collection.dequeue(Reusable.photoCell, for: indexPath)

RxSwift 扩展

ReusableKit 支持 RxSwift 扩展。

users // Observable<[String]>
  .bind(to: collectionView.rx.items(Reusable.userCell)) { i, user, cell in
    cell.user = user
  }

贡献

欢迎提交 Pull Requests 💖

为了创建 Xcode 项目,请运行

$ swift package generate-xcodeproj

安装

许可

ReusableKit 基于 MIT 许可。 更多信息请参考 LICENSE 文件。