Установить политику кэширования по умолчанию apollo swift - PullRequest
3 голосов
/ 30 апреля 2019

Есть ли способ установить политику кэширования по умолчанию в Apollo Framework в Swift?

Я знаю, что могу установить политику кэширования для каждого запроса на выборку с помощью аргумента cachePolicy следующим образом:

Apollo.shared.client.fetch(query: getUser, cachePolicy: CachePolicy.fetchIgnoringCacheData)

Но я ищу способ установить политику кэширования в client объекте для всех запросов.

1 Ответ

4 голосов
/ 30 апреля 2019

Глядя на исходный код, нет такого метода или cachePolicy переменной, которую вы можете установить для ApolloClient.

Вы можете создать одноэлементный клиентский класс Apollo и добавить свой собственный метод извлечения с нужным cachePolicy, например:

class ApolloManager {

    static let shared = Apollo()

    private var client: ApolloClient!
    var store: ApolloStore { return self.client.store }

    static func configure(url: URL, configuration: URLSessionConfiguration? = nil) {
        let store = ApolloStore(cache: InMemoryNormalizedCache())
        Apollo.shared.client = ApolloClient(networkTransport: HTTPNetworkTransport(url: url, configuration: configuration ?? .default), store: store)
    }

    @discardableResult
    func fetch<Query: GraphQLQuery>(query: Query, cachePolicy: CachePolicy = .fetchIgnoringCacheData, queue: DispatchQueue = .main, resultHandler: OperationResultHandler<Query>? = nil) -> Cancellable? {
        return self.client.fetch(query: query, cachePolicy: cachePolicy, queue: queue, resultHandler: resultHandler)
    }

}

Инициализатор может быть добавлен в didFinishLaunchingWithOptions метод AppDelegate.swift

let url = URL(string: "http://192.168.1.4:2223")!
ApolloManager.configure(url: url)

Вы также можете инициализировать своего клиента с помощью configuration

let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = ["Authorization": "token"]
ApolloManager.configure(url: url, configuration: configuration)

Использование

ApolloManager.shared.fetch(query: getUser)
...