鸽子(Pigeon):SwiftUI与UIKit的异步数据处理利器
🚀 项目简介
Pigeon,一个基于SwiftUI和UIKit的库,利用Combine来处理异步数据流。灵感来源于React Query,它提供了一种高效的方式来获取服务器API数据、缓存响应、在不同组件间共享数据、更新服务器资源以及管理分页数据源。无论您选择何种工具进行数据获取,Pigeon都能轻松应对。
💡 项目技术解析
Pigeon的核心在于查询(Queries)和突变(Mutations)。查询对象负责获取服务器数据,而突变对象则用于修改服务器数据。两者都遵循ObservableObject
协议,因此它们完全兼容SwiftUI并可以观察其状态变化。
- 查询通过
QueryKey
标识,用于缓存结果、内部链接和需要重新获取时的无效化。 - 数据获取高度灵活,您可以自由选择Alamofire、URLSession、GraphQL或CoreData等工具,只需要使用Combine发布者。
- 缓存功能可选,Pigeon能够几乎无需配置地存储您的响应,并在应用中自动填充数据。
💻 应用场景
- 在SwiftUI视图中实时展示从服务器获取的数据。
- 跨组件共享和更新远程数据。
- 管理分页数据,例如无限滚动列表。
- 利用Mutation实现对服务器资源的增删改操作。
- 根据需要刷新数据,如界面改变或新数据可用。
📚 项目特点
- 灵活性高 - 不限制数据获取方式,支持任何Combine兼容的发布者。
- 易于使用 - 基于
ObservableObject
设计,与SwiftUI紧密集成,状态变化一目了然。 - 智能缓存 - 自动缓存查询结果,降低网络请求频率,提高用户体验。
- 强大的Mutation - 支持服务器资源的更新,并能触发相关查询的刷新。
- 分页支持 - 提供专门的分页查询类型,方便构建分页列表。
👀 快速上手
下面是一个简单的示例,演示如何使用Pigeon获取用户列表:
// 定义数据模型
struct User: Codable, Identifiable {
let id: Int
let name: String
}
// 创建用户列表视图
struct UsersList: View {
// 创建一个查询
@ObservedObject var users = Query<Void, [User]>(
key: QueryKey(value: "users"),
fetcher: {
// 使用URLSession获取数据
URLSession.shared
.dataTaskPublisher(for: URL(string: "https://jsonplaceholder.typicode.com/users")!)
.map(\.data)
.decode(type: [User].self, decoder: JSONDecoder())
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
}
)
var body: some View {
List(users.state.value ?? []) { user in
Text(user.name)
}
.onAppear(perform: {
// 视图出现时重新获取数据
users.refetch(request: ())
})
}
}
这个简短的例子展示了如何定义查询、设置数据获取方法以及在SwiftUI视图中显示数据。
总之,Pigeon是iOS开发中的一个强大工具,它简化了数据处理和UI同步的过程。如果你正在寻找一个灵活且高效的解决方案来管理你的应用程序的异步数据,那么Pigeon绝对值得你尝试!