【问题标题】:What is type '()' in swift? [duplicate]swift中的'()'类型是什么? [复制]
【发布时间】:2017-03-28 23:28:21
【问题描述】:

我收到一个传递() 类型参数的事件。

它是一个空元组吗..?

我指的是这种表达方式:

let x = ()

【问题讨论】:

标签: swift


【解决方案1】:

() 既是一个 typeVoid 是空元组类型的类型别名),也是该类型的唯一 value。所以

let x = ()

x 定义为类型 ()(又名Void)的常量属性,()

等价的语句是

let x:() = ()
let x:Void = ()

不是

let x = Void // error: expected member name or constructor call after type name

因为Void 是一个类型而不是一个值。

当定义没有参数和/或没有返回值的函数类型 似乎有共识使用() 作为空参数列表, 和Void 没有返回值。例如,这可以在 UIKit 完成处理程序,或用于提交到的执行块 GCD 调度队列,例如

func sync(execute block: () -> Void)

【讨论】:

  • A 会补充一点,虽然() -> ()(Void) -> Void 都可以,但定义没有参数和返回值的函数的共识是() -> Void
  • @Sulthan:您是对的,感谢您的建议。但是,我更愿意用一些我还没有找到的参考资料来备份它。
  • 如果您不计算所有完成处理程序的 Apple 参考文档,我认为没有参考 :)
  • @Sulthan:完成,再次感谢。
【解决方案2】:

查看Swift grammar 的文档:

所有元组类型都包含两个或多个类型,Void 除外,它是空元组类型的 type alias()

tuple-type → (­)­ | (­ tuple-type-element­ , ­tuple-type-element-list­ )­
tuple-type-element-list → tuple-type-element­ | tuple-type-element ­, ­tuple-type-element-list­
tuple-type-element → element-name­ type-annotation­ | type­
element-name → identifier­

因此,是的,它是零类型/元素的元组。

【讨论】:

  • 也来自语法文档。 > 所有元组类型都包含两个或多个类型,Void 除外,它是空元组类型的类型别名,()
  • @GabrielePetronella 感谢您指出这句话。
【解决方案3】:

是的,它是空元组,又名Void

标准的Void类型定义为:

typealias Void = ()

没有明确指定返回类型的函数的返回类型;一个空元组(即())。

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多