gpt4 book ai didi

swift - Swift 中的未知函数返回类型。 ()?

转载 作者:行者123 更新时间:2023-11-28 10:09:52 25 4
gpt4 key购买 nike

在函数类型中,可以这样写

()->()?

而且构建良好! () 是什么?

最佳答案

() -> ()?定义高阶类型,采用空元组 ()作为参数,并返回 Optional空元组的 Optional<()>或者,使用 ?Optional , 简单 ()? .

空元组有一个 typedef,名为 Void ,所以以下所有都是等价的高阶类型:

() -> ()?
() -> Optional<()>
() -> Void?
() -> Optional<Void>

应用于闭包的示例:

// c1 through c4 all have the same type, but use
// typedefs (Void) or optional sugar (?) for variations.
var c1: () -> ()? = { return nil }
let c2: () -> Optional<()> = c1
let c3: () -> Void? = c1
let c4: () -> Optional<Void>? = c1

请注意 ()也是空元组的一个实例(除了用作它的类型),这意味着我们可以重新分配,例如可变闭包 c1返回 () :

c1 = { return () }
c1 = { return .some(()) }

另一方面,如Void只是空元组 type 的类型定义,我们需要显式实例化一个非可选(命名)Void例如,如果我们想返回“一个空元组实例”而不实际使用 ()值(并且仅使用 Void typedef):

c1 = {
let v: Void
return v
}

通常在 Swift 中声明一个非可选的不可变属性而不为其分配 是错误的,但是自从 Void typedef,即空元组,只能保存一个值(()),Swift 编译器似乎足够聪明,允许省略将这唯一可能的值分配给v。以上(或者,非常特殊的空元组类型的特例)。

最后,注意所有非可选() - 返回闭包或函数可以省略返回值,并且在函数声明中,也可以省略类型:

// Now studying the case of non-optional () return
var c6: () -> () = { print("Implicit () return") }
func f1() { print("Implicit return type, implicit () return") }
func f2() { print("Implicit return type, explicit () return"); return () }
func f3() -> () { print("Explicit return type, implicit () return") }
func f4() -> () { print("Explicit return type, explicit () return"); return () }
c6 = f1
c6 = f2
c6 = f3
c6 = f4
let emptyTupleInstance = c6() // "()"

关于swift - Swift 中的未知函数返回类型。 ()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49343279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com