【发布时间】:2019-08-13 01:07:18
【问题描述】:
我正在使用 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 行时,我都会收到错误无法推断通用参数“查询”。
但是,当注释掉该行时,它可以正常工作,但显然该功能毫无意义。最终我想概括这个函数,这样我就可以将查询传递给它,但是我如何从这个基本闭包中获取数据呢?
本质上的问题是,我如何在函数中“包装”一个闭包?
这个函数的重点是能够在函数中获取table view section的行数:
override func tableView(_ tableView:UITableView, numberOfRowsInSection section: Int -> Int{
return fetchQueryResults.count
}
但是,视图会在此函数运行之前加载。我认为这是因为apollo.fetch() 异步运行?
【问题讨论】:
-
我很困惑...您的闭包将“result”作为参数,而您使用“results”
-
@Naresh 帖子中的错字,刚刚修复
-
不确定该错误,但我建议您不要将该函数用作数据源...保留一个数组...我知道您的困惑是什么,您缺少的成分被称为一个逃逸的闭包...去这里了解它 - medium.com/@bestiosdevelope/… 这将需要一些时间来理解它,取决于您的经验...在您实现闭包后,您的 fetchQueryResults 不会返回任何内容,但它会提供一个数组作为闭包的输入,它将刷新 tableview 等...
标签: swift graphql apollo apollo-ios