今天,我正在使用Alamofire提取一个int值。 它将int拉得很好,但是我想将int值保存在请求之外(在另一个函数中,viewDidLoad())。
我不确定如何调用完成处理程序,目前似乎什么也没做。
这是提取有问题的int值的方法(lastModified)。
func checkVersion(completion: @escaping (Int) -> Void) {
Alamofire.request(versionCheckEndpoint).responseJSON { response in
if(response.result.value != nil) {
let json = JSON(response.result.value!)
self.s3Endpoint = json["s3BucketURL"].stringValue
let lastModified = json["lastModified"].intValue
self.latestVersion = lastModified
}
}
}
我尝试将值保存到实例变量,但这不起作用。
我在viewDidLoad()中这样调用了完成处理程序,但是我很肯定这是正确的:
self.checkVersion() { response in
self.latestVersion = response
}
谁能给我一些有关如何将lastModified的int值保存到某些局部变量的见解,以便它不包含在Alamofire请求的范围内?
答案 0 :(得分:1)
在函数checkVersion
中,未调用完成块。
您必须在获取值后调用它(尽管我建议将其设置为可选)
func checkVersion(_ completion: @escaping (Int?) -> Void) {
Alamofire.request(versionCheckEndpoint).responseJSON { response in
guard let value = response.result.value else {
completion(nil)
return
}
let json = JSON(value)
self.s3Endpoint = json["s3BucketURL"].stringValue
let lastModified = json["lastModified"].intValue
completion(lastModified)
}
}
并这样称呼它:
self.checkVersion() { value in
guard let value = value else {
//handle invalid values here
return
}
latestVersion = value
// update the view if needed
}