[英]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.