Ios 在Swift中编写大型应用程序时,我是否需要使用;init";有什么办法吗?

Ios 在Swift中编写大型应用程序时,我是否需要使用;init";有什么办法吗?,ios,swift,initialization,default,convenience-methods,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"

这更像是一个概念问题。为什么要麻烦使用
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之间进行选择,因为所有内容都将从它们的超类继承。是否有理由使用此
init
方法


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

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

var numberOfTires =  4

var color = UIColor.red()

var maxSpeed = 100// mph
现在,你想建造大量的豪华汽车,并使用你的“BuildCar”工具来完成。你所能做的就是造一辆红色的车,它有4个轮胎,最大速度为100英里/小时


但是如果你想造一辆新车呢?蓝色的,有4个轮胎,最高时速120?如果使用init,就可以很容易地更改变量

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

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

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

建议

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


在您的例子中,如果
Person
是一个结构,您可以像这样初始化它,而无需自己编写初始值设定项:
Person(名称:“David”,高度:178)

因此,当您不为一个新人设置姓名/身高时,您可以将其命名为
Daniel
,即
178
高?如果程序员未提供初始值设定项,Swift将提供一个defalut初始值设定项,将声明的属性设置为其初始声明的属性。属性必须声明为nil或非nil值。因此,默认情况下,每个
Person
实例应命名为Daniel,高度为178?这听起来不是个好主意。将虚假数据作为默认值只会导致程序员错误,忘记用真实数据填充这些字段,这是初始化程序首先应该确保的。您还失去了拥有不可变属性的好处。将它们设置为VAR意味着它们可以在外部更改,这可能并不总是您想要的。这是一个非常糟糕的主意的原因有很多。其中之一是初始化顺序,因为某些属性通常依赖于其他属性。有些事情总是不变的(理想情况下,大多数是不变的)。我认为你错过了现代编程语言的要点。它们并不比较旧的编程语言(例如C或C++)更好,但它们可以帮助您编写更健壮的代码,防止您产生错误并编写更可读的代码。通过故意避免这些特性,您将使未来的每一位代码管理者都很难做到这一点。我懂了。如果我一步一步地对类进行连续更改,那么让类保留其以前的值比再次默认值要容易得多。抓住你了。谢谢你的精彩编辑,老板。我理解。感谢您抽出时间回复。