Как извлечь выгоду из Apollo iOS Closure?Как «обернуть» замыкание в функцию? - PullRequest
1 голос
/ 22 марта 2019

Я использую Apollo iOS для получения запросов GraphQL. Я хочу переместить закрытие запроса apollo.fetch() в отдельную функцию в классе. Этот класс будет содержать статическую ссылку на клиент apollo, а также функции для выполнения мутаций и запросов GraphQL.

Я пытаюсь сделать следующее:

static func fetchQueryResults() -> CountriesQuery.Data.Country?{
    var myResult: CountriesQuery.Data.Country?
    myResult = nil
    apollo.fetch(query: countriesQuery) { (result, error) in
        print(result?.data)
        myResult = result?.data //this line causes error
    }
    return myResult
}

Всякий раз, когда я добавляю строку myResult = result?.data, я получаю ошибку Общий параметр 'Запрос' не может быть выведен.

Однако, когда строка закомментирована, она работает нормально, но, очевидно, функция не имеет смысла. В конце концов я хотел бы обобщить эту функцию, чтобы я мог передать в нее запрос, но как мне получить данные из этого базового замыкания?

По сути, вопрос в том, как мне "обернуть" замыкание в функции?

Смысл этой функции в том, чтобы иметь возможность получить количество строк для раздела табличного представления в функции:

override func tableView(_ tableView:UITableView, numberOfRowsInSection section: Int -> Int{
    return fetchQueryResults.count
}

Однако представление загружается до запуска этой функции. Я думаю, это потому, что apollo.fetch() работает асинхронно?

...