Swift 闭包完成处理程序

Posted

技术标签:

【中文标题】Swift 闭包完成处理程序【英文标题】:Swift Closure Completion Handler 【发布时间】:2018-02-23 16:36:51 【问题描述】:

我现在有一个函数可以确定 UILabel 的隐藏行为:func shouldHideLabel() -> Bool

我需要从 Web 请求中检索数据以确定是否隐藏此标签,因此在 shouldHideLabel() 内部我正在调用函数 func webRequestDataIsValid() -> Bool

webRequestDataIsValid() 正在做一个带有闭包的 web 请求,返回一个对象,并且该对象上有一个变量 isValid,它返回 true 或 false。

我的目标是等待这个 isValid 标志返回给我,从 webRequestDataIsValid 返回真或假,然后使用该返回值从原始 shouldHideLabel 函数返回。

我正在使用shouldHideLabel 内部的完成处理程序来等待来自webRequestDataIsValid 的数据,但我不确定如何等待shouldHideLabel 内部返回以完成我的关闭。在闭包内,您似乎无法从函数返回。

非常感谢任何帮助。谢谢!

【问题讨论】:

Edit 你的问题包括你的实际代码。 【参考方案1】:

我假设您的网络请求将包含一个完成块, 试试这个:

func webRequestDataIsValid(completion: @escaping ((Bool) ->Void)) 
    whateverYourRequestMethod.response  httpResponse in
        let isValid = true // retrieve your boolean
        completion(isValid)
    )

【讨论】:

以上是关于Swift 闭包完成处理程序的主要内容,如果未能解决你的问题,请参考以下文章

当完成处理程序显式使用 @escaping 时,Swift 推断完成处理程序闭包是默认的 @nonescaping 而不是 @escaping

Swift-使用完成处理程序更新闭包外的全局变量

在 Swift 中遇到完成处理程序和闭包问题

swift - 如何从系统函数的完成处理程序闭包中返回?

iOS Swift 如何访问在完成处理程序闭包中创建的数据——在闭包之外

如何存储闭包完成处理程序以供以后调用?