【问题标题】:What does the parentheses mean in this var declaration?这个 var 声明中的括号是什么意思?
【发布时间】:2021-07-16 09:39:09
【问题描述】:

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

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

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

【问题讨论】:

  • 括号表示init,数组的init

标签: swift variable-declaration


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    这相当于:

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

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

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

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

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

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

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

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

    您问题中的代码风格如下。

    但在某些类型更复杂的情况下,这会降低编译器的速度,因此许多人的变量声明更加明确。

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

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

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 2022-12-05
      • 2010-09-19
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多