Swift init()是做什么的
Swift中的init()方法是用来初始化类的对象的。当使用类的函数Object() { [native code] }创建一个对象时,它会被自动调用并建立对象的初始状态。为了提供自定义的初始化行为,例如为属性建立默认值或进行其他设置工作,init()方法可以被改变。
在不返回任何值的情况下,该函数有时被用来用一些值来初始化对象。类的指定初始化器,init()方法,应该用来创建该类的对象。
下面是一个简单的init()的例子
在这个例子中,你将创建一个带有一些属性的类。为了给这些属性提供默认值,你可以创建一个没有参数的初始化器。
例子
class Person {
var firstName: String
var lastName: String
var age: Int
init() {
self.firstName = ""
self.lastName = ""
self.age = 0
}
}
在这个例子中,init()方法被用来初始化firstName、lastName和age属性,默认值分别为空字符串和0。
你可以通过调用构造函数来创建该类的一个对象 —
let person = Person()
init()方法将被自动调用,人物对象的属性将被初始化为默认值。
下面是另一个带参数的init()的例子
在这个例子中,你将创建一个带有一些属性的类。为了给这些属性提供初始值,你可以创建一个带参数的初始化器。
例子
class Person {
var firstName: String
var lastName: String
var age: Int
init(firstName: String, lastName: String, age: Int) {
self.firstName = firstName
self.lastName = lastName
self.age = age
}
}
在这个例子中,init()方法需要三个参数:firstName, lastName, 和age。
你可以通过调用带有参数的构造函数来创建该类的一个对象
let person = Person(firstName: "Amit", lastName: "Sharma", age: 30)
init(firstName:lastName:age:)方法将被自动调用,人物对象的属性将被初始化为传递给构造函数的值。
你也可以为init()方法的参数提供默认值
class Person {
var firstName: String
var lastName: String
var age: Int
init(firstName: String = "", lastName: String = "", age: Int = 0) {
self.firstName = firstName
self.lastName = lastName
self.age = age
}
}
在这种情况下,你可以通过调用没有任何参数的构造函数来创建一个类的对象。这些属性将被初始化为默认值。
let person = Person()
init()方法将被自动调用,人物对象的属性将被初始化为默认值。
在使用init()方法的过程中,我们需要注意一些事情 --
- 初始化器的 “重载 “是指一个类有多个初始化器,每个初始化器有不同的参数。
-
大部分初始化器的工作是由便利初始化器完成的,当它调用另一个被称为 “指定 “初始化器的初始化器时。 当类的底层实现是相同的,但有多种方法来初始化它时,我们使用方便的初始化器。
例子
下面是一个有指定初始化器和方便初始化器的类的例子:
class Person {
var firstName: String
var lastName: String
var age: Int
init(firstName: String, lastName: String, age: Int) {
self.firstName = firstName
self.lastName = lastName
self.age = age
}
convenience init(firstName: String) {
self.init(firstName: firstName, lastName: "", age: 0)
}
}
在这个例子中,init(firstName:lastName:age:)方法是指定的初始化器,而init(firstName:)是方便的初始化器。
你可以通过调用指定的初始化器来创建该类的一个对象
let person = Person(firstName: "John", lastName: "Doe", age: 30)
你也可以通过调用方便的初始化器来创建一个类的对象
let person = Person(firstName: "John")
在这个例子中,方便的初始化器调用指定的初始化器,并传递lastName和age的默认值。
此外,自动初始化器继承是Swift的一个特点。这意味着,如果一个类没有定义任何自己独特的初始化器,它将自动继承其超类的所有指定初始化器。
以下是在Swift中使用init()方法的一些优势-
- 一致性– 用init()方法初始化一个对象,可以确保一个类的所有对象都有一致的初始状态。
-
自定义 – init()方法可以被重写,以提供自定义的初始化行为。这允许你为属性设置默认值,执行其他设置任务,甚至验证输入参数。
-
多个初始化器 – 一个类可以有多个初始化器,每个初始化器有不同的参数,这允许你提供不同的方式来创建一个类的对象。
-
方便的初始化器 – 一个类可以有方便的初始化器,它可以调用另一个初始化器来完成大部分的初始化工作。
-
自动初始化器继承 – 自动初始化器继承是Swift的一项功能,如果类没有定义任何自己的自定义初始化器,就可以自动继承其超类的所有指定初始化器。
-
内存管理– 用init()方法初始化一个对象,可以确保该对象在内存中被正确分配和初始化。
-
类型安全– Swift使用类型安全,init()方法被用来确保一个对象的类型正确。
-
封装– 对象的实现细节可能包含在init()方法中,使其他代码在不正确的状态下构建对象更具挑战性。
-
提高可读性 – 通过使用init()方法,代码变得更加可读和可维护,因为它清楚地表明一个对象正在被创建和初始化。
-
它是必备的– init()方法是一个类的指定初始化器,它对于创建该类的对象是必要的。当使用类的构造函数创建一个对象时,它被自动调用。
结论
在Swift中,一个类的对象可以通过init()方法进行初始化并设置其初始状态。当通过执行类的函数来创建一个对象时,它会被自动调用。它可以被定制,以提供独特的初始化行为。
init()函数是每个类中必须的,因为它允许开发者保证一个类的所有对象都有一个一致的初始状态,提供多种创建对象的方法,封装实现细节,并使代码更容易阅读和维护。总的来说,init()方法是一个强大的工具,可以帮助开发者编写结构良好、可靠和可管理的Swift代码。