首页 > 解决方案 > 为什么将 void 分配给局部变量

问题描述

所以这实际上是可能的。

func clearItems() {
}

func reloadItems(_ clearItems: (() -> Void)? = nil) {
    if let void = clearItems?() {

    }
}

reloadItems(clearItems)

这应该是非法的吗?或者我们应该被迫使用 _ 而不是变量名?void 真的可以在这里以某种方式被消耗吗?

标签: swiftsyntax

解决方案


是的,但是您需要将reloadItems方法更改为如下所示:

func reloadItems(_ clearItems: (() -> Void)? = nil) {
    if let void = clearItems {
        void() // Call void.
    }
}

通过说clearItems?(),您正在调用传递的函数,这不是您想要做的事情。您想安全地解开传递的函数,因此您需要将其视为传递的变量,就像上面的代码片段一样。

如果你没有使用if let语句,你可以clearItems这样调用:

clearItems?()

如果不是,这将调用传递的函数,如果是nil,则什么也不做nil

所以你的reloadItems函数可以简单地变成这样:

func reloadItems(_ clearItems: (() -> Void)? = nil) {
    clearItems?() // This will call the passed function if it isn't nil, and will do nothing if it is nil.
}

推荐阅读