理解没有返回类型的闭包语法

san*_*nch 4 closures conditional-binding swift

我在这里第一次进入 swift 并且我偶然发现了一个闭包语句,根据我目前对闭包是如何编写的理解,它对我来说没有多大意义。这真的是一个由两部分组成的问题,因为我也不太了解这个闭包的条件绑定背后的意图/解释。

我抛出的代码块是这样的:

 FIRAuth.auth()?.createUser(withEmail: email, password: password) {
    (user, error) in if let error = error {
        print(error.localizedDescription)
        return
    }
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,闭包需要根据 docs 定义指定一个返回类型,(something1, something2) -> ()因此从上面的代码位来看,这是否意味着 swift 可以通过不包含-> ()?

我的假设是条件绑定语句只是说'如果一个错误 arg 被传递到这个闭包中,那么打印错误?

请在您的解释中使用尽可能多的细节,以便我进一步理解。干杯!

dfr*_*fri 5

以下都是等价的

func foo1() -> () { }
func foo2() -> () { return () }
func foo3() -> () { return Void() }
func foo4() -> () { return }

func foo5() -> Void { }
func foo6() -> Void { return () }
func foo7() -> Void { return Void() }
func foo8() -> Void { return }

func foo9() { }
func foo10() { return () }
func foo11() { return Void() }
func foo12() { return }

print(type(of: foo1))  // (()) -> ()
// ...
print(type(of: foo5))  // (()) -> ()
// ...
print(type(of: foo9))  // (()) -> ()
// ...
Run Code Online (Sandbox Code Playgroud)

如果没有为函数(/closure)提供返回类型,则推断空元组类型类型别名为Void)。然而,我们可以明确地提供这个返回类型,要么是()类型),要么是Void。从语言指南 - 功能

没有返回值的函数

函数不需要定义返回类型。...

...

严格来说,这个版本的greet(person:)函数仍然返回一个值,即使没有定义返回值。没有定义返回类型的Void函数返回一个特殊的 type 值。这只是一个空元组,写为().

相反,如果return在功能块的末尾给出no ,则与显式返回空元组的实例相同,即())。这也可以简单地写为return.