这些关闭之间的区别是什么?
let closureA: () -> ()
和
let closureB: () -> Void
答案 0 :(得分:19)
如果查看标题,您会看到Void是(),
的类型/// The empty tuple type.
///
/// This is the default return type of functions for which no explicit
/// return type is specified.
typealias Void = ()
你可以使用这样的游乐场验证,
let a = Void()
println(a) // prints ()
<强>更新强>
如果您希望在头文件中看到Void的声明,请在上面的代码中,在swift playground或xcode编辑器中输入以下代码,如下所示,
let a: Void = ()
然后,cmd +点击上面表达式中的“Void”关键字,您将进入头文件,您可以在其中实际看到Void的声明。
该文档已更新,其中包含更多信息,
/// The return type of functions that don't explicitly specify a return type; /// an empty tuple (i.e., `()`). /// /// When declaring a function or method, you don't need to specify a return /// type if no value will be returned. However, the type of a function, /// method, or closure always includes a return type, which is `Void` if /// otherwise unspecified. /// /// Use `Void` or an empty tuple as the return type when declaring a /// closure, function, or method that doesn't return a value. /// /// // No return type declared: /// func logMessage(_ s: String) { /// print("Message: \(s)") /// } /// /// let logger: (String) -> Void = logMessage /// logger("This is a void function") /// // Prints "Message: This is a void function" public typealias Void = ()
答案 1 :(得分:2)
完全没有区别
Void
是()的别名:
typealias Void = ()
答案 2 :(得分:2)
相同。它只是一个类型,所以它的工作方式完全相同。
typealias Void = ()
听起来像Erica Sadun和Apple正试图坚持使用Void: http://ericasadun.com/2015/05/11/swift-vs-void/
答案 3 :(得分:1)
如果您是因为遇到诸如Cannot convert value of type 'Void.Type' to specified type 'Void'
之类的错误而到达这里的,那么考虑一下可能会很有用:
()
可能有两件事:
()
可以是一种类型-空元组类型,它与Void
相同。()
可以是一个值-一个空的元组,它与Void()
相同。在我的情况下,我希望将()
更改为Void
,但这会导致上述错误。解决它要么意味着仅将其保留为()
,要么使用Void()
。后者可以放在全局常量let void = Void()
中,然后可以只使用void
。这是否是一种好的做法/风格,尚待争论。