解释 Swift 中类的用法以及继承的优势
简介
本文将指导您了解类的用法以及在 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() { // display the student information using the required format. } } 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 语言中编写核心内容以形成正确层次结构的最重要概念。始终尝试定义超类以使通用内容分离。