首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中使用完成处理程序链接函数?

如何在Swift中使用完成处理程序链接函数?
EN

Stack Overflow用户
提问于 2018-05-07 17:30:20
回答 1查看 1.1K关注 0票数 1

我将一些函数链接在一起,并且无法理解如何在所有函数运行后调用带有返回值的完成处理程序。

代码语言:javascript
复制
func getAirQuality(completion: (aqi: Int?) -> Void) {
    callAPI()
}

private func callAPI() {
    // ... get data
    self.parseDataForAQI(data: data)
}

private func parseDataForAQI(data: Data) {
    let aqi = aqi
    // Send aqi up to completion handler in getAirQuality
}

所以当每件事都说了做了,我就可以做这样的事情:

代码语言:javascript
复制
getAirQuality(completion: { aqi -> Void in {
    // Do something with aqi
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-07 17:44:48

我的第一个假设是,您的前3个函数是类的一部分。如果是这样,一种方法是将完成处理程序保存为实例变量。

代码语言:javascript
复制
class AirQualityProvider {
    var aBlock: ((Int?) -> Void)?

    func getAirQuality(completion: @escaping (Int?) -> Void) {
        aBlock = completion
        callAPI()
    }

    private func callAPI() {
        let data = Data()
        parseDataForAQI(data: data)
    }

    private func parseDataForAQI(data: Data) {
        let aqi = 1
        if let completion = aBlock {
            completion(aqi)
        }
    }
}

下面是一个在操场上写的调用者的例子。

代码语言:javascript
复制
let aqp = AirQualityProvider()
aqp.getAirQuality { (value) in
    if let value = value {
        print("Value = \(value)")
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50219571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档