FetchRequests 6.1.0

FetchRequests 6.1.0

Adam Lickel维护。



  • Square

FetchRequests

FetchRequests 是一个受 NSFetchedResultsController 启发并使用 Swift 编写的调度库。

Build Status codecov CocoaPods Compatible Carthage Compatible Platform Pod License

特性

  • 对项目列表进行排序和分区
  • 监听实时更新
  • 渐变底层数据变化
  • 批量获取关联值
  • 支持分页请求
  • SwiftUI 集成
  • 全面的单元测试覆盖

用法

FetchRequests 可用于任何组合的网络、数据库和文件查询。当其背后有类似 WebSocket(你预期数据将实时更新)的东西时最佳。

要开始使用,您将创建一个 `FetchRequest`,该 `FetchRequest` 解释了您的数据访问模式。`FetchedResultsController` 是访问您数据的接口。以下是对象排序的启发式方法

  • 分区名称升序(如果存在)
  • 传递的排序描述符
  • 实体的插入顺序升序

您可以关联相关值到您获取的实体。这些关联值将自动缓存,直到该控制器的生命周期结束。如果发生内存压力事件,它将释放对那些对象的持有,允许它们被卸载。

示例应用有一个基于UserDefaults的存储机制。单元测试使用内存中的对象,并通过NotificationCenter进行事件通知。

现在,它严重依赖于Obj-C运行时以及键值观察。应该可以进一步移除这些限制,并且已经做出了努力来实现这一点。

SwiftUI

有两个可用的SwiftUI属性包装器,分别是FetchableRequestSectionedFetchableRequest。这些与CoreData属性包装器类似。

控制器在第一次渲染视图时执行一次检索操作,之后将依赖于实时更新事件。

示例

struct AllUsersView: View {
    @FetchableRequest(
        definition: FetchDefinition(request: User.fetchAll),
        sortDescriptors: [
            NSSortDescriptor(
                key: #keyPath(User.name),
                ascending: true,
                selector: #selector(NSString.localizedStandardCompare)
            ),
        ]
    )
    private var members: FetchableResults<User>

    // ...
}

对于更复杂的使用案例,您可能需要为您的视图编写初始化器,例如

struct MembersView: View {
    private let fromID: EntityID

    @FetchableRequest
    private var members: FetchableResults<Membership>

    func init(fromID: EntityID) {
        self.fromID = fromID
        _members = FetchableRequest(
            definition: Membership.fetchDefinition(from: fromID, toEntityType: .user)
        )
    }

    // ...
}

要求

  • iOS 13+ / macOS 10.15+ / tvOS 13+ / watchOS 6+
  • Xcode 12+
  • Swift 5+

当通过SPM安装时,我们将使用Swift Collections。否则,我们将使用一个不太高效的OrderedSet

沟通

  • 如果您发现了一个bug,请打开一个问题。
  • 如果您有功能请求,请打开一个问题。
  • 如果您想做出贡献,请提交一个pull请求。

安装

CocoaPods

使用CocoaPods安装,并在您的Podfile中指定以下内容

pod 'FetchRequests', '~> 5.0'

Carthage

使用Carthage通过在Cartfile中指定以下内容进行安装

github "square/FetchRequests" ~> 5.0

Swift包管理器

通过将它在您的Package.swiftdependencies值中添加来使用Swift包管理器进行安装

dependencies: [
    .package(url: "https://github.com/square/FetchRequests.git", from: "5.0.0")
]

贡献

如果您想为FetchRequests贡献代码,可以通过GitHub进行,方法是分叉仓库并发送拉取请求。

提交代码时,请尽最大努力遵循现有的约定和风格,以便使代码尽可能易于阅读。

在您的代码被接受到项目中之前,您还必须签署个人贡献者许可协议(CLA)

行为准则

我们希望贡献者遵守Square开源代码行为准则。该文件的副本可在此处找到。

许可协议

FetchRequests在MIT许可下发布。

MIT License

Copyright (c) 2019 Square Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.