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

Ala*_*lan 3 init swift

class A {

    private var value: Int

    init(value: Int) {
        self.value = value
    }
}
Run Code Online (Sandbox Code Playgroud)

我们有A类,我用A.init(值:5)A(值:5)创建这个对象有什么区别?谢谢

Dav*_*ist 9

两者之间没有功能差异.两种样式都将调用相同的初始化程序并生成相同的值.


我见过的大多数样式指南都倾向于.init省略显式A(value:)- 支持更短的语法 - 这也类似于许多其他语言中的构造函数语法.

也就是说,在某些情况下,能够明确引用初始化程序是有用的.例如:

  • 当可以推断出类型时,初始化的行为比正在初始化的类型更重要.能够打电话return .init(/* ... */)而不是return SomeComplicatedType(/* ... */)let array: [SomeComplicatedType] = [.init(/* ... */), .init(/* ... */)]

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

再次,这是一个风格问题.