Swift 中的 init() 是什么作用?


Swift 中的 init() 方法用于初始化类的对象。当使用类的构造函数创建对象时,它会被自动调用并建立对象的初始状态。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() 方法将被自动调用,并且 person 对象的属性将使用默认值进行初始化。

这是另一个带有参数的 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:) 方法将被自动调用,并且 person 对象的属性将使用传递给构造函数的值进行初始化。

您还可以为 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() 方法将被自动调用,并且 person 对象的属性将使用默认值进行初始化。

在使用 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 代码。

更新于: 2023年2月28日

492 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.