在 Swift 中使用 init 和 () 创建对象有什么区别

What is difference between create object with init and () in Swift

class A {

    private var value: Int

    init(value: Int) {
        self.value = value
    }
}

我们有 class A,我使用 A.init(value: 5) 和 [=14= 创建这个对象有什么区别]A(值:5)?谢谢

两者在功能上没有区别。两种样式都将调用相同的初始化程序并产生相同的值。


我见过的大多数风格指南都倾向于省略显式 .init 部分,而采用更短的 A(value:) 语法——这也类似于许多其他语言中的构造函数语法。

也就是说,在某些情况下,能够显式引用初始化程序是很有用的。例如:

  • 当可以推断类型并且初始化行为比被初始化的类型更重要时。能够调用 return .init(/* ... */) 而不是 return SomeComplicatedType(/* ... */)let array: [SomeComplicatedType] = [.init(/* ... */), .init(/* ... */)]

  • 将初始化程序传递给高阶函数时,能够传递 "something".map(String.init) 而不是 "something".map({ String([=16=]) })

同样,这是风格的问题。