Stefan 0.2.5

Stefan 0.2.5

Stefan维护。



Stefan 0.2.5

  • Szymon Mrozek和Piotr Bernad

Carthage compatible Cocoapods Platform License

Stefan logo

为什么?

作为移动开发者,我们都要处理数据显示集合。但这真的总是那么简单吗?

Stefan spaghetti

看起来像是意大利面?这样的情况很常见,应用程序显示数据/占位符(这可能会根据例如加载数据状态的不同而有所不同),我们中的一些人结束了定义状态和混乱的一切。

Stefan overview

Stefan 是一个框架,它帮助你在集合视图中管理状态。基本上它是数据源和视图本身之间的中间商。当然,它支持内置的UITableView和UICollectionView,但决定你的 ReloadableViewPlaceholderView 是你的事。它包含了在加载数据集合时可能出现的最常见的状态。

基本设置

  • 定义 Stefan 对象,最佳方案是为每个 ReloadableView 定义一个 Stefan
  • 连接 Stefan 的 reloadableViewplaceholderPresenter(二者可能都是 nil)。

请记住:实现 LoadableStatePlaceholderPresentable 的类必须有一个对占位符视图的 弱引用

  • 调用 stefan.load(newState: ...)

设置示例

private func setupStefan() {
	viewModel.stefan.reloadableView = self.tableView
	viewModel.stefan.placeholderPresenter = self
	viewModel.stefan.load(newState: .noContent) // initial state
}

为了读取当前项,请调用

try stefan.state.items()

关于占位符的一些话

  • 我们已经尽力使其尽可能灵活,因此您可以提供自定义的占位符视图,该视图应遵循 LoadableStatePlaceholderView 并实现 ItemsLoadableStateBindable 协议。要显示自定义占位符视图,只需实现由 Stefan 的 placeholderPresenter 处理的功能 customPlaceholderView 的自身版本。

定制示例

public func customPlaceholderView() -> LoadableStatePlaceholderView {
	let view = LoadingPlaceholderView.instanceFromNib()
    view.dataSource = self.viewModel
    return view
}
  • 此外,还提供了一个由标题、副标题和活动指示器组成的默认占位符视图,也许对您也有帮助。请随意查看示例项目中它是如何工作的。

闭包

为了使 Stefan 充分通用,我们提供了常见的闭包模式委托。以下是一些可用的委托闭包

public var shouldReload: ((ReloadableView!) -> Bool)
    
public var didChangeState: ((ItemsLoadableState<ItemType>) -> Void)
    
public var shouldDisplayPlaceholder: ((ItemsLoadableState<ItemType>) -> Bool)

不同的

Stefan 提供了差分函数的默认实现,其结果应为 ItemReloadingResult。该结果告诉 Stefan 应该重新加载什么(或者也许对他来说没有什么可做的)。您可以通过定义来提供自己的实现

stefan.statesDiffer = ...

请注意,这是一个弱对象,您必须处理保留它。

Stefan 有一个 Differ 依赖项,这在比较时执行集合的快速操作时是必需的。初始化 Stefan 时,您可以提供重新加载类型,可能是 animatedbasic。默认情况下,动画是禁用的,但当你启用它时,Stefan 将自动由自己处理集合动画。

RxStefan

我们为 Stefan 添加了一些 RxSwift 扩展,请根据 此存储库 进行操作。

Carthage

请在您的 Cartfile 中添加以下条目

github "appunite/Stefan"

然后运行 carthage update

Cocoapods

请在您的 Podfile 中添加以下条目

pod 'Stefan'

然后运行 pod install

已知的已知问题

• 尚无问题

贡献

本项目由 Piotr BernadSzymon Mrozek 创立和维护。

我们需要您的帮助来报告或修复错误。我们也希望听到您关于功能建议的意见。如果您有想法让 Stefan 更好,请随时向我们发送 Pull Request。

许可证

Stefan 采用 MIT 许可证发布。更多信息请参阅 License.md