在 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=]) })
同样,这是风格的问题。
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=]) })
同样,这是风格的问题。