解释 Swift 中类的用法和继承的好处

swiftserver side programmingprogramming

简介

本文将指导您了解类的用法以及在 Swift 语言中使用继承的好处。

在本文中,我们将介绍以下内容 -

  • 什么是类,它在 Swift 中的用途是什么?

  • 什么是继承,它的好处是什么?

什么是类?

在 Swift 语言中,类是属性和方法的表示。我们使用类将属性和方法封装到具有相同特征的单个实体中。

我们使用类将信息存储在变量和常量中。类可以包含计算信息的方法,并在需要时返回值。

例如,我们可以创建一个名为 Student 的类,使用变量存储姓名、年龄、年级、分数、学校等信息。为了操作属性,我们可以定义方法。

类的好处

  • 可以使用类将特征从一个类继承到另一个类。

  • 在运行时,类型转换允许用户验证类的类型。

  • 反初始化程序释放内存资源。

示例

在此示例中,我们将创建一个名为 Student 的类来存储有关学生的一些基本信息。我们将通过创建学生类来了解如何使用这些属性。

class Student {
   var name: String
   var grade: Int = 0
   var score: Float = 0.0
   var city: String = ""
   var schoolName: String
   init(name: String, schoolName: String) {
      self.name = name
      self.schoolName = schoolName
   }
   func displayInfo() {
      // 使用所需的格式显示学生信息。
   }
}
let john = Student(name: "John Johnson", schoolName: "Notional School")
print("name: \(john.name)")
print("school name: \(john.schoolName)")

输出

name: John Johnson
school name: Notional School

我们如何在类中存储信息?

基本上,我们可以使用属性在类中存储信息。Swift 的类可用于访问各种类型的属性。

使用类中的属性,我们可以读取和写入信息。Swift 中有两种类型的属性:存储属性和计算属性。

Swift 语言提供不同类型的属性

  • 存储属性−这些用于永久存储信息。在该实例进入内存之前,它将存在于内存中。一旦创建类的实例,它就会占用内存空间。

  • 延迟存储属性−这些是特殊类型的存储属性,将在首次访问时进行计算。我们在声明惰性属性时使用了 lazy 修饰符作为前缀。

  • 计算属性 − 对于类属性的某些计算,我们可以使用计算属性,而不是更改原始值。为此,我们可以使用返回计算值的计算属性。

语法

在类内执行操作的语法

使用方法,我们可以在类内执行不同的操作。

func greeting(_ name: String) {
   print("Good morning, \(name)")
}

什么是继承?

继承是一种将一个类的特征和方法适配到另一个类的方法。通过继承,我们可以向另一个类型添加补充特征,从而扩展现有类型的功能。

当我们从另一个类(例如类 A)继承一个类(例如类 B)时,类 B 称为子类,类 A 称为超类。

使用继承的好处

在 Swift 语言中使用继承有一些好处。有以下几种 -

  • 减少代码冗余。

  • 提供更好的代码可重用性。

  • 编写代码时,父类和子类易于维护。

  • 我们可以通过覆盖父类的现有功能来向子类添加额外功能。

示例

在下面的示例中,我们将通过从超类继承来创建一个超类和一些子类。让我们看看超类在编写代码时如何对我们有益。

import Foundation
// super class
class Person {
   var name: String
   var address: String
   var age: Int
   init(name: String, address: String, age: Int) {
      self.name = name
      self.address = address
      self.age = age
   }
   func isYoung() -> Bool {
      age >= 18
   }
}
// sub class
class Student: Person {
   var collegeName: String
   var grade: Int
   init(collegeName: String, grade: Int, name: String, address: String, age: Int) {
      self.collegeName = collegeName
      self.grade = grade
      super.init(name: name, address: address, age: age)
   }
   func checkAgeEligibility() {
      if self.isYoung() {
         print("\(self.name) is eligible to take admission.")
      } else {
         print("\(self.name) is not eligible to take admission.")
      }
   }
}
// sub class
class Voter: Person {
   var isPreviouslyCasted: Bool = false
   func eligibleToVote() {
      if self.isYoung() && isPreviouslyCasted {
         print("\(self.name) is eligible to cast vote.")
      } else {
         print("\(self.name) is not eligible to cast vote.")
      }
   }
}
let student = Student(collegeName: "Primary School", grade: 11, name: "Amit Bhalla", address: "New Delhi", age: 13)
student.checkAgeEligibility()
let voter = Voter(name: "Sunil Chandra", address: "Bangalore", age: 21)
voter.eligibleToVote()

输出

Amit Bhalla is not eligible to take admission.
Sunil Chandra is not eligible to cast vote.

解释

在上面的例子中,我们创建了一个名为 Person 的类,并使用 isYoung() 方法检查该人的资格。

Student 和 Voter 类现在从 Person 类继承,并添加了与子类相关的方法。

超类有一个可供所有子类访问的方法。所以我们可以利用超类的功能。

结论

继承是 Swift 语言中最重要的概念,用于以适当的层次结构编写核心。始终尝试定义超类以将常见事物分开。


相关文章