是通过值还是通过引用分配/传递Swift函数?

Mus*_*gXY 5 function pass-by-reference pass-by-value variable-assignment swift

当Swift中的函数被赋值给一个变量或作为嵌套函数从高级函数返回时,它是通过值还是通过引用传递的?我写的时候:

func foo() -> Bool
{
    return false
}

var funcVar = foo
Run Code Online (Sandbox Code Playgroud)

确实funcVar收到了对"funcVar"名称的引用foo(),或者是foo()创建并存储在内存中的副本?以下代码的相同问题:

func otherfoo() -> (Int) -> ()
{
    func bar(num :Int) {}
    return bar
}

var funcVar = otherfoo()
Run Code Online (Sandbox Code Playgroud)

第二个例子特别困惑我,因为,如果我调用funcVar(3)我不应该能够访问bar的情况下函数是通过引用分配/返回的,因为bar它位于同一范围内的另一个函数中funcVar,但它仍然有效(来自C++)背景我只是惊讶它编译).有人可以帮我解释一下这个问题吗?

Aar*_*sen 8

Apple文档:

在上面的示例中,incrementBySeven和incrementByTen是常量,但这些常量引用的闭包仍然能够增加它们捕获的runningTotal变量.这是因为函数和闭包是引用类型.

无论何时将函数或闭包赋值给常量或变量,实际上都是将该常量或变量设置为对函数或闭包的引用.