swift - 从 api 调用获取数据后无法更新实例变量
问题描述
这是我的类中的实例变量
var restaurant = String;
override func viewDidLoad() {
super.viewDidLoad()
self.pool = AWSCognitoIdentityUserPool(forKey: AWSCognitoUserPoolsSignInProviderKey)
if (self.user == nil) {
self.user = self.pool?.currentUser()
}
self.title = self.user?.username
// fills the list with a certain data set
//self.refresh()
这是我的完成块
grabData {
for values in self.restaurants{
print(values)
}
}
}
这是进行 api 调用的函数
func grabData(completion : @escaping() -> ()){
let databaseMap = AWSDynamoDBObjectMapper.default()
let expression = AWSDynamoDBScanExpression()
databaseMap.scan(Restaraunt.self, expression: expression,completionHandler:{(response:AWSDynamoDBPaginatedOutput?,error:Error?)-> Void in
// testing the response
if(response != nil){
print("got a reponse")
if(response?.items.count == 0)
{
print("did not get a response")
}else{
for item in (response?.items)!{
let data: Restaraunt = item as! Restaraunt;
let name: String = data._name as! String;
self.restaurants.append(name)
}
}
}
})
completion()
}
该函数似乎没有更新实例变量,我知道在设置一些断点后我得到了正确的数据。(当我在 for 循环上设置断点时,它显示餐厅实例变量为空)。
解决方案
你打错电话completion()
了。在您实际获取数据之前调用它。您必须从完成处理程序中调用它:
databaseMap.scan(Restaraunt.self, expression: expression, completionHandler: { (response: AWSDynamoDBPaginatedOutput?, error: Error?) in
// testing the response
if (response != nil){
print("got a reponse")
if (response?.items.count == 0) {
print("did not get a response")
} else {
for item in (response?.items)! {
let data: Restaraunt = item as! Restaraunt;
let name: String = data._name as! String;
self.restaurants.append(name)
}
}
}
// this has to be inside the closure
completion()
})
推荐阅读
- java - 返回自定义中介输出中的列表对象
- c++ - 从 VBA 调用 C++ DLL
- amazon-web-services - AWS 生命周期配置 Noncurrentversion 转换:参数验证失败
- android - 多屏UI设计实现
- python - 如何使用python从目录中删除文件
- windows - 尽管有参数,Powershell Import-PfxCertificate 仍提示位置
- java - 我找不到 java.util.InputMismatchException 的答案
- go - 如何在 GoLang 中处理内容类型 azip 和内容编码 application/a-gzip?
- blockchain - Corda - 执行具有多个输出状态的流时出现问题
- python - 将python文件制作为可执行文件。模块:tkinter,熊猫