在Swift中编写大型应用程序时,我是否甚至需要使用“init”方法?

时间:2016-08-17 13:24:54

标签: ios swift initialization default convenience-methods

这更像是一个概念问题。为什么要使用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方法?

它是否允许严格默认值初始化的应用程序无法实现的编码模式?还是出于资源/内存管理等原因?

2 个答案:

答案 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,您可以使用structstructs的一个神奇属性是,只要您不自己创建init方法,就会创建一个默认的init,它接受​​每个属性的值。< / p>

在您的情况下,如果Person是一个结构,您可以像这样初始化它而无需自己编写初始化程序:Person(name: "David", height: 178)