是否可以强制完成关闭?就像具有返回值的函数必须始终返回一样,如果有一种方法可以强制闭包包含始终完成所需的语法,那将是很好的选择。

例如,这段代码 不会编译 因为该函数并不总是返回一个值:

func isTheEarthFlat(withUserIQ userIQ: Int) -> Bool {
    if userIQ > 10 {
        return false
    }
}

以完全相同的方式,我想定义一个带有闭包 的函数,如果闭包永远不会返回,它也不会编译 。例如,下面的代码可能永远不会返回一个 completionHandler:
func isTheEarthFlat(withUserIQ userIQ: Int, completionHandler: (Bool) -> Void) {
    if userIQ > 10 {
        completionHandler(false)
    }
}

上面的代码可以编译,但我想知道是否有一个关键字强制闭包在所有情况下都发送完成处理程序。可能和上面函数中的Void有关?

最佳答案

不,如果您忘记(或不需要)在所有可能的条件(如 return 语句)下调用完成处理程序,则没有任何语言结构会导致编译器错误。

这是一个有趣的想法,可能会对该语言进行有用的增强。也许作为参数声明中某处的 required 关键字。

10-08 06:09