Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/devxoul/reusablekit
Generic reusables for UICollectionView and UITableView
https://github.com/devxoul/reusablekit
cocoa generic reusable swift
Last synced: 2 days ago
JSON representation
Generic reusables for UICollectionView and UITableView
- Host: GitHub
- URL: https://github.com/devxoul/reusablekit
- Owner: devxoul
- License: mit
- Created: 2016-05-25T15:53:42.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-07-04T13:42:26.000Z (over 1 year ago)
- Last Synced: 2024-12-13T02:51:01.562Z (9 days ago)
- Topics: cocoa, generic, reusable, swift
- Language: Swift
- Homepage:
- Size: 45.9 KB
- Stars: 161
- Watchers: 2
- Forks: 36
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ReusableKit
![Swift](https://img.shields.io/badge/Swift-5.0-orange.svg)
[![CocoaPods](http://img.shields.io/cocoapods/v/ReusableKit.svg)](https://cocoapods.org/pods/ReusableKit)
[![Build Status](https://travis-ci.org/devxoul/ReusableKit.svg)](https://travis-ci.org/devxoul/ReusableKit)
[![Codecov](https://img.shields.io/codecov/c/github/devxoul/ReusableKit.svg)](https://codecov.io/gh/devxoul/ReusableKit)Generic reusables for Cocoa. Currently supports `UITableView` and `UICollectionView`.
## At a Glance
#### Before 🤢
```swift
collectionView.register(UserCell.self, forCellWithReuseIdentifier: "userCell")
collectionView.dequeueReusableCell(withReuseIdentifier: "userCell", for: indexPath) as! UserCell
```1. A hard-coded string identifier can cause a human error.
2. A force downcasting should be avoided.#### After 😊
```swift
let reusableUserCell = ReusableCell()
collectionView.register(reusableUserCell)
collectionView.dequeue(reusableUserCell) // UserCell
```1. A string identifier is generated automatically using UUID and stored in the struct.
2. A generic can ensure the type of the dequeued cell statically.## Example Usage
It is recommended to define reusable types as a static constants in an `enum` or a `struct`.
#### UITableView
```swift
// 1. define
enum Reusable {
static let headerView = ReusableCell()
static let userCell = ReusableCell()
}// 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
```swift
// 1. define
enum Reusable {
static let headerView = ReusableCell()
static let photoCell = ReusableCell()
}// 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 Extension
ReusableKit supports a RxSwift extension.
```swift
users // Observable<[String]>
.bind(to: collectionView.rx.items(Reusable.userCell)) { i, user, cell in
cell.user = user
}
```## Contrubiting
Pull requests are welcomed 💖
In order to create Xcode project, run:
```console
$ swift package generate-xcodeproj
```## Installation
- **For iOS 9+ projects** with [CocoaPods](https://cocoapods.org):
```ruby
pod 'ReusableKit'
pod 'ReusableKit/RxSwift' # with RxSwift extension
```## License
**ReusableKit** is under MIT license. See the [LICENSE](LICENSE) file for more info.