这更像是一个概念问题。为什么要使用init
?
class Person {
var name:String
var height:Double
...
init(name: String) {
self.name = name
self.height:Double
...
}
为什么不将所有内容都设为默认值?
var name = "Daniel"
var height = 178.0
这样,我也不必担心在指定和'便利'之间做出决定,因为一切都只是继承自他们的超类。是否有理由采用此init
方法?
它是否允许严格默认值初始化的应用程序无法实现的编码模式?还是出于资源/内存管理等原因?
答案 0 :(得分:3)
让我们假设您有一个制造汽车和工具/类的工厂" BuildCar"具有以下属性:
var numberOfTires = 4
var color = UIColor.red()
var maxSpeed = 100// mph
现在你想要制作一大堆你喜欢的汽车并使用你的BuildCar'这样做的工具。你所能做的就是建造红色汽车, 4个轮胎,最大速度 100英里/小时。
但是,如果你想建造一辆新车呢?一个蓝色的,有4个轮胎,最大速度为120?如果使用init,则可以轻松更改变量。
答案 1 :(得分:1)
如果你非常小心,你可以侥幸逃脱。它需要您在创建每个Person
对象时配置所有正确的值,以防止它使用默认值。
只需几次使用后,这意味着编写更多代码而不仅仅是创建一个init
函数,该函数接受初始化对象所需的值。
其中一个危险是,如果其他人(或将来你)使用该代码,他们可能会初始化Person
,而不是正确配置它,这可能会导致意外行为。
<强>建议强>
在许多情况下,您不需要使用class
,您可以使用struct
。 structs
的一个神奇属性是,只要您不自己创建init
方法,就会创建一个默认的init
,它接受每个属性的值。< / p>
在您的情况下,如果Person
是一个结构,您可以像这样初始化它而无需自己编写初始化程序:Person(name: "David", height: 178)