在 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
,您可以使用 struct
。 structs
的神奇属性之一是,只要您不自己创建 init
方法,就会创建一个默认的 init
,它接受每个 属性 的值.
在你的例子中,如果 Person
是一个结构,你可以像这样初始化它而无需自己编写初始化程序:Person(name: "David", height: 178)
这更像是一个概念问题。为什么要费心使用 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
,您可以使用 struct
。 structs
的神奇属性之一是,只要您不自己创建 init
方法,就会创建一个默认的 init
,它接受每个 属性 的值.
在你的例子中,如果 Person
是一个结构,你可以像这样初始化它而无需自己编写初始化程序:Person(name: "David", height: 178)