繁体   English   中英

这个 var 声明中的括号是什么意思?

[英]What does the parentheses mean in this var declaration?

我是 Swift 的新手,我刚看到这个声明:

var completionHandlers = [(String) -> Void]()

据我所知,这一行声明了一个类型为 (String) -> Void 的闭包数组,但我不确定那里的括号是什么意思。

[MyType]()仅仅是语法糖Array<MyType>()这本身是语法糖Array<MyType>.init() 它初始化一个MyType的空数组。

它有自己的特殊语法,因为Array是一种常见的数据类型。 Dictionary还具有[String: MyType]()样式的语法糖。

括号是调用初始化程序的一种方式。

这相当于:

var completionHandlers: [(String) -> Void] = []

你会看到它的另一种方式是:

var completionHandlers: [(String) -> Void] = .init()

您在初始化空集合时会看到它,因为例如,如果您有:

var someVariable = ["hello", "world"]

编译器将能够推断someVariable的类型为[String]因为它知道内容的类型。 但是你不能像这样初始化一个空数组,因为没有关于类型的信息。 所以[(String) -> Void]()是一种向空初始化器提供类型的方法。

Swift 中的一般建议是使用类型推断,其中变量的类型是从它的初始值推断出来的:

let intVariable = 3
let stringVariable = "Hello"
//etc

您问题中的代码风格遵循这一点。

但是在某些更复杂类型的情况下,这可能会减慢编译器的速度,因此许多人对他们的变量声明更加明确。

let intVariable: Int = 3
let stringVariable: String = "Hello"

这是一个品味问题(和争论)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM