测试已测试 | ✓ |
语言语言 | Objective C++Objective C++ |
许可证 | MIT |
发布上次发布 | 2015年11月 |
由 Jonathan Crooke 维护。
CKCollectionViewDataSourceChangesetBuilder 是为 ComponentKit 的 CKTransactionalComponentDataSourceChangeset
的 DSL 建造器。它受到了 Masonry 的极大启发,你应该能够用更易读的代码编写你的 changeset 构建过程。
CKCollectionViewDataSourceChangesetBuilder
使用动词、名词和介词,以允许您用可读性极高的英语[除几个例外外]表达您的 changeset 构建。一些示例会使这一点更清晰。
[CKCollectionViewDataSourceChangesetBuilder build:^(CKCollectionViewDataSourceChangesetBuilder *builder) {
builder.insert.section.at.index(0);
builder.insert.item(@"Foo").at.indexPath([NSIndexPath indexPathForItem:1 inSection:4]);
builder.remove.section.at.index(1);
builder.move.section.at.index(0).to.index(4);
}];
由于关键字数量有限,可能的组合应该一目了然。建造器已编写,以便在语法误用时抛出有用的异常。
CKCollectionViewDataSourceChangesetBuilderTests
提供所有语法组合的示例,请首先查看那里。
ck_indexPath(ITEM, SECTION)
用于保存多次使用 [NSIndexPath indexPathForItem:inSection:]
的麻烦。以下两个宏旨在弥补 Objective-C 中省略默认参数的不足;当我们移动或删除项时,我们需要重复使用动词 item
。然而,由于我们没有可用于 插入 的对象,所以必须使用 nil
。这将不会很易读。取而代之,您可以使用
ck_removeItem
代替 remove.item(nil)
。ck_moveItem
代替 move.item(nil)
。ComponentKit
主要用 C++ 编写,这意味着你通常会在 Obj-C++ 上下文中使用它。虽然从 Swift 上下文中创建 changeset 也是可能的,但我认为这还不是为此时添加另一个实现的理由。当然,如果有人愿意实现它,我将欢迎接受 PR!
享受乐趣!