在 Apollo iOS 中,可以使用 ApolloStore
类来实现从本地缓存获取 GraphQL 数据的功能。下面是一个简单的示例代码:
import Apollo
// 创建 ApolloClient 实例
let apollo = ApolloClient(url: URL(string: "YOUR_GRAPHQL_ENDPOINT_URL")!)
// 设置缓存策略为 .returnCacheDataAndFetch
apollo.cacheKeyForObject = { $0["id"] }
// 创建一个网络传输对象
let transport = HTTPNetworkTransport(url: apollo.url)
// 创建一个自定义的缓存实现对象
let cache = InMemoryNormalizedCache()
// 创建 ApolloStore 实例
let store = ApolloStore(cache: cache)
// 将 ApolloStore 实例和网络传输对象传递给 ApolloClient
apollo.client = ApolloClient(networkTransport: transport, store: store)
// 构建查询
let query = YourQuery()
// 发起查询
apollo.fetch(query: query, cachePolicy: .returnCacheDataAndFetch) { result in
switch result {
case .success(let graphQLResult):
// 从本地缓存获取数据
let data = graphQLResult.data
// 处理数据
case .failure(let error):
// 处理错误
}
}
在上面的示例中,我们首先创建了一个 ApolloClient
实例,并设置了缓存策略为 .returnCacheDataAndFetch
。接着,我们创建了一个自定义的缓存实现对象 InMemoryNormalizedCache
,并将其传递给 ApolloStore
实例。最后,我们将 ApolloStore
实例和网络传输对象传递给 ApolloClient
。
在发起查询时,我们可以指定缓存策略为 .returnCacheDataAndFetch
,这将会先从本地缓存获取数据,然后再发起网络请求获取最新数据。在成功回调中,我们可以通过 graphQLResult.data
获取从本地缓存获取的数据,并进行处理。在失败回调中,我们可以处理错误情况。
这样就可以实现 Apollo iOS 使用 Swift 总是从本地缓存获取 GraphQL 数据的功能。