{"id":13990687,"url":"https://github.com/MostafaTaghipour/iOSEasyList","last_synced_at":"2025-07-22T13:31:14.877Z","repository":{"id":56932250,"uuid":"119190453","full_name":"MostafaTaghipour/iOSEasyList","owner":"MostafaTaghipour","description":"A data-driven UICollectionView and UITableView framework for building fast and flexible lists","archived":false,"fork":false,"pushed_at":"2019-04-28T17:41:21.000Z","size":50222,"stargazers_count":32,"open_issues_count":0,"forks_count":14,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-19T15:47:32.107Z","etag":null,"topics":["animation","datasource","diffable","empty-view","endless","endless-scroll","expandable","filterable","infinite-scroll","loading-footer","multiple-data-type","pagination","sectioned","swift","uicollectionview","uicollectionviewlayout","uitableview"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MostafaTaghipour.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-27T18:22:48.000Z","updated_at":"2024-04-20T20:32:40.000Z","dependencies_parsed_at":"2022-08-21T00:00:33.765Z","dependency_job_id":null,"html_url":"https://github.com/MostafaTaghipour/iOSEasyList","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/MostafaTaghipour/iOSEasyList","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MostafaTaghipour%2FiOSEasyList","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MostafaTaghipour%2FiOSEasyList/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MostafaTaghipour%2FiOSEasyList/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MostafaTaghipour%2FiOSEasyList/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MostafaTaghipour","download_url":"https://codeload.github.com/MostafaTaghipour/iOSEasyList/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MostafaTaghipour%2FiOSEasyList/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266505805,"owners_count":23940019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animation","datasource","diffable","empty-view","endless","endless-scroll","expandable","filterable","infinite-scroll","loading-footer","multiple-data-type","pagination","sectioned","swift","uicollectionview","uicollectionviewlayout","uitableview"],"created_at":"2024-08-09T13:03:06.773Z","updated_at":"2025-07-22T13:31:11.925Z","avatar_url":"https://github.com/MostafaTaghipour.png","language":"Swift","funding_links":[],"categories":["Swift"],"sub_categories":[],"readme":"# iOSEasyList\n\n[![CI Status](http://img.shields.io/travis/mostafa.taghipour@ymail.com/iOSEasyList.svg?style=flat)](https://travis-ci.org/mostafa.taghipour@ymail.com/iOSEasyList)\n[![Version](https://img.shields.io/cocoapods/v/iOSEasyList.svg?style=flat)](http://cocoapods.org/pods/iOSEasyList)\n[![License](https://img.shields.io/cocoapods/l/iOSEasyList.svg?style=flat)](http://cocoapods.org/pods/iOSEasyList)\n[![Platform](https://img.shields.io/cocoapods/p/iOSEasyList.svg?style=flat)](http://cocoapods.org/pods/iOSEasyList)\n\n## [Android version is here](https://github.com/MostafaTaghipour/AndroidEasyList)\n\nFramework to simplify the setup and configuration of UITableView and UICollectionView data sources and cells. It allows a type-safe setup of (UITableView,UICollectionView) DataSource and Delegate. DataSource also provides out-of-the-box diffing and animated deletions, inserts, moves and changes.\n\n\nEverything you need to implement your own lists:\n- Easy to use UITableView and UICollectionView\n- No more calling reloadData\n- Diffable\n- Configurable animations\n- Sectioned\n- Pagination\n- Collapsible\n- Loading footer\n- Various UICollectionView layouts\n- Empty View\n- Filterable\n- Multiple data type\n\n\u003cimg width=\"290\" alt=\"animation\" src=\"https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/master/screenshots/animation-ios.gif\"\u003e \u003cimg width=\"290\" alt=\"expandable\" src=\"https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/master/screenshots/expandable_ios.gif\"\u003e \u003cimg width=\"290\" alt=\"filtering\" src=\"https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/master/screenshots/filtering-ios.gif\"\u003e \u003cimg width=\"290\" alt=\"message\" src=\"https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/master/screenshots/message-ios.gif\"\u003e \u003cimg width=\"290\" alt=\"layout\" src=\"https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/master/screenshots/layout-ios.gif\"\u003e \u003cimg width=\"290\" alt=\"pagination\" src=\"https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/master/screenshots/pagination-ios.gif\"\u003e \u003cimg width=\"290\" alt=\"sectioned\" src=\"https://raw.githubusercontent.com/MostafaTaghipour/iOSEasyList/master/screenshots/sectioned-ios.gif\"\u003e\n\n\n## Requirements\n\n- Swift 4\n- iOS 8+\n\n## Installation\n\niOSEasyList is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'iOSEasyList'\n```\n\n\n## Usage\n1. Define your model\n```swift\nstruct Movie{\n    let id : String\n    let title : String\n}\n\n//optional: If you want to use Diffable capabilities (e.g. automatic animations like delete, insert, move , reload)\n//           inherit 'Diffable' ptotocol\nextension Movie:Diffable{\n    var diffIdentifier: String {\n        return id\n    }\n\n    //optional: this function need for automatic reload\n    func isEqual(to object: Any) -\u003e Bool {\n        guard let to = object as? Model else { return false }\n\n        return self.id==to.id \u0026\u0026\n               self.title==to.title\n    }\n}\n```\n\n2. Define `TableViewAdapter` in ViewController\n```swift\nlazy var adapter: TableViewAdapter = { [unowned self] in\n    let adapter=TableViewAdapter(tableView: tableView) { (tv, ip, item) -\u003e (UITableViewCell) in\n        let cell = tv.dequeueReusableCell(withIdentifier: MovieCell.reuseIdentifier, for: ip) as! MovieCell\n        cell.data = item as? Movie\n        return cell\n    }\n    \n    //optional\n    adapter.animationConfig = AnimationConfig(reload: .fade, insert: .top, delete: .bottom)\n    \n    return adapter\n}()\n```\n\n3. Set Data\n```swift\noverride func viewDidLoad() {\n    super.viewDidLoad()\n    adapter.setData(newData: items, animated: true)\n}\n```\n\n4. That's it, for more samples please see example project\n\n## Example\n\nTo run the example project, clone the repo, and run `pod install` from the Example directory first.\n\n\n## Thanks for\n\n- [AlignedCollectionViewFlowLayout](https://github.com/mischa-hildebrand/AlignedCollectionViewFlowLayout)\n\n\n## Author\n\nMostafa Taghipour, mostafa@taghipour.me\n\n## License\n\niOSEasyList is available under the MIT license. See the LICENSE file for more info.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMostafaTaghipour%2FiOSEasyList","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMostafaTaghipour%2FiOSEasyList","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMostafaTaghipour%2FiOSEasyList/lists"}