Swift / Alamofire完成处理程序的难度

时间:2018-07-24 17:14:41

标签: ios swift networking alamofire completionhandler

今天,我正在使用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请求的范围内?

1 个答案:

答案 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
}