gpt4 book ai didi

swift - 如何从 Apollo iOS Closure 中获取值(value)?/How to "wrap"a closure in a function?

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:43 26 4
gpt4 key购买 nike

我正在使用 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 时,我都会收到错误消息Generic parameter 'Query' could not be inferred。

然而,当该行被注释掉时它工作正常,但显然该功能没有意义。最终我想概括这个函数,以便我可以将查询传递给它,但是我如何从这个基本闭包中获取数据?

本质上问题是,我如何在函数中“包装”闭包?

这个函数的重点是能够在函数中获取 TableView 部分的行数:

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

但是, View 会在该函数运行之前加载。我认为这是因为 apollo.fetch() 正在异步运行?

最佳答案

目前我使用的是 Apollo iOS 版本 0.16.0,这是最新版本 https://github.com/apollographql/apollo-ios

0.13.0以下版本有一些改动,可以看0.13.0 release notes - 不要使用 (result, error) 因为它们已经从可空参数的元组切换到结果。

尝试使用这样的东西:

Apollo.shared.client.fetch(query: GetProductQuery(id: id)) { results in

do {

if let gqlErrors = try results.get().errors {
if(!gqlErrors.isEmpty) {
apiResponseError.message = gqlErrors[0].message
publishSubject.onError(apiResponseError)
}
return
}

guard let gplResult = try results.get().data?.getProduct else {
apiResponseError.message = "Error getting results"
publishSubject.onError(apiResponseError)
return
}

publishSubject.onNext(gplResult)

} catch let errorException {
apiResponseError.message = errorException.localizedDescription
publishSubject.onError(apiResponseError)
}

}

关于swift - 如何从 Apollo iOS Closure 中获取值(value)?/How to "wrap"a closure in a function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55292947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com