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

What does the parentheses mean in this var declaration?

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

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

据我所知,这一行声明了一个类型为 (String) -> Void 的闭包数组,但我不确定括号中的含义。

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

这相当于:

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"

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

[MyType]()只是Array<MyType>()syntactic sugar,它本身就是Array<MyType>.init()的语法糖。它初始化一个 MyTypes.

的空数组

它有自己的特殊语法,因为 Array 是一种常见的数据类型。 例如,Dictionary 也有 [String: MyType]() 风格的语法糖。