这个 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()
的语法糖。它初始化一个 MyType
s.
的空数组
它有自己的特殊语法,因为 Array
是一种常见的数据类型。
例如,Dictionary
也有 [String: MyType]()
风格的语法糖。
我是 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()
的语法糖。它初始化一个 MyType
s.
它有自己的特殊语法,因为 Array
是一种常见的数据类型。
例如,Dictionary
也有 [String: MyType]()
风格的语法糖。