2

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

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

4

2 回答 2

3

假设您有一个制造汽车的工厂和一个具有以下属性的工具/类“BuildCar”:

var numberOfTires =  4

var color = UIColor.red()

var maxSpeed = 100// mph

现在你想建造很多你喜欢的汽车,并使用你的“BuildCar”工具来做到这一点。你所能做的就是建造有4 个轮胎的红色汽车,最高时速为100 英里/小时

但是如果你想造一辆新车呢?蓝色的,有 4 个轮胎,最高速度为 120?如果您使用 init,您可以轻松更改变量。

于 2016-08-17T13:38:42.207 回答
1

如果你非常小心,你可以逃脱它。它要求您在Person创建每个对象后立即为其配置所有正确值,以防止它使用默认值。

然而,在仅仅使用几次之后,这将意味着编写更多的代码,而不仅仅是创建一个init接受所需值来初始化对象的函数。

危险之一是,如果其他人(或将来的您)使用该代码,他们可能会初始化 a Person,并且没有正确配置它,这可能会导致意外行为。

建议

在许多情况下,您不需要使用 a class,您可以使用 a struct。的神奇属性之一structs是,只要您不init自己创建方法,就会创建一个默认值,该默认init值接受每个属性的值。

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

于 2016-08-17T14:07:44.530 回答