CKCollectionViewDataSourceChangesetBuilder 0.9.2

CKCollectionViewDataSourceChangesetBuilder 0.9.2

测试已测试
语言语言 Objective C++Objective C++
许可证 MIT
发布上次发布2015年11月

Jonathan Crooke 维护。



  • 作者
  • Jonathan Crooke

这是什么?

CKCollectionViewDataSourceChangesetBuilder 是为 ComponentKitCKTransactionalComponentDataSourceChangeset 的 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)

为什么没有 Swift?

ComponentKit 主要用 C++ 编写,这意味着你通常会在 Obj-C++ 上下文中使用它。虽然从 Swift 上下文中创建 changeset 也是可能的,但我认为这还不是为此时添加另一个实现的理由。当然,如果有人愿意实现它,我将欢迎接受 PR!


享受乐趣!

[email protected]