在 Swift 中编写大型应用程序时,我什至需要使用 "init" 方法吗?

When writing a large app in Swift, do I even need to use the "init" method at all?

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

这样,我也不必担心在指定初始化和 'convenience' 初始化之间做出选择,因为一切都将从它们的超类继承。有没有理由使用这种 init 方法?

它是否允许使用严格默认值初始化的应用程序无法实现的编码模式?还是因为resource/memory管理之类的原因?

假设您有一家制造汽车的工厂和一个工具/class "BuildCar",其属性为:

var numberOfTires =  4

var color = UIColor.red()

var maxSpeed = 100// mph

现在您想制造大量您喜欢的汽车并使用您的 'BuildCar' 工具来实现。您所能做的就是制造 red 具有 4 个轮胎 且最高速度为 100 mph 的汽车].

但是如果你想造一辆新车怎么办?蓝色的,有 4 个轮胎,最高速度为 120?如果你使用了 init,你可以很容易地改变变量。

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

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

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

建议

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

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