Swift 类和对象

在本教程中,我们将学习 Swift 类,还将学习借助实例创建对象。

Swift 也是一种面向对象的编程语言。而且,与其他 OOP(面对对象) 语言一样,它也支持对象和类的概念。

对象只是数据(变量)和方法(函数)的集合。类似地,类是该对象的蓝图。

在我们学习对象之前,让我们先了解一下 Swift 中的类。


Swift 类

类被视为对象的蓝图。我们可以把这个类看作一个房子的草图(原型)。它包含了关于地板、门、窗等的所有细节。根据这些描述,我们建造了房子。房子是目标。

因为可以用相同的描述创建许多房屋,所以我们可以从一个类中创建许多对象。


定义 Swift 类

我们使用 class 关键字在 Swift 中创建一个类。例如,

  1. class ClassName {
  2. // class definition
  3. }

这里,我们创建了一个名为 ClassName 的类。

让我们看一个例子,

  1. class Bike {
  2. var name = ""
  3. var gear = 0
  4. }

这里,

  • Bike - 班级名称

  • name/gear - 类内的变量,分别具有默认值 “”0

注意:类中的变量和常量称为属性。

Swift 对象

对象称为类的实例。例如,假设 Bike 是一个类,那么我们可以从类中创建诸如 bike1bike2 等对象。

下面是创建对象的语法。

  1. var objectName = ClassName()

让我们看一个实例,

  1. // create class
  2. class Bike {
  3. var name = ""
  4. var gears = 0
  5. }
  6. // create object of class
  7. var bike1 = Bike()

在这里,bike1 是类的对象。现在,我们可以使用这个对象访问类属性。


使用对象访问类属性

我们使用 . 符号来访问类的属性。例如,

  1. // modify the name property
  2. bike1.name = "Mountain Bike"
  3. // access the gear property
  4. bike1.gears

这里,我们使用了 bike1.namebike.gears 分别更改和访问 namegears 属性的值。


实例:类和对象
  1. // define a class
  2. class Bicycle {
  3. // define two properties
  4. var name = ""
  5. var gears = 0
  6. }
  7. // create instance of Person
  8. var bike1 = Bicycle()
  9. // access properties and assign new values
  10. bike1.gears = 11
  11. bike1.name = "Mountain Bike"
  12. print("Name: \(bike1.name), Gears: \( bike1.gears) ")

结果为:

  1. Name: Mountain Bike, Gears: 11

在上面的例子中,我们用两个属性定义了名为 Bike 的类:namegears

我们还创建了 Bike 类的对象 bike1

最后,我们使用 .notation 访问和修改了对象的属性。


创建类的多个对象

我们还可以从一个类创建多个对象。例如,

  1. // define a class
  2. class Employee {
  3. // define a property
  4. var employeeID = 0
  5. }
  6. // create two objects of the Employee class
  7. var employee1 = Employee()
  8. var employee2 = Employee()
  9. // access property using employee1
  10. employee1.employeeID = 1001
  11. print("Employee ID: \(employee1.employeeID)")
  12. // access properties using employee2
  13. employee2.employeeID = 1002
  14. print("Employee ID: \(employee2.employeeID)")

结果如下:

  1. Employee ID: 1001
  2. Employee ID: 1002

在上面的实例中,我们创建了 Employee 类的两个对象 employee1employere2

注意:我们可以创建任意数量的结构实例。

Swift 类中的函数

我们还可以在 Swift 类中定义函数。在类中定义的 Swift 函数 称为方法。

让我们看一个实例,

  1. // create a class
  2. class Room {
  3. var length = 0.0
  4. var breadth = 0.0
  5. // method to calculate area
  6. func calculateArea() {
  7. print("Area of Room =", length * breadth)
  8. }
  9. }
  10. // create object of Room class
  11. var studyRoom = Room()
  12. // assign values to all the properties
  13. studyRoom.length = 42.5
  14. studyRoom.breadth = 30.8
  15. // access method inside class
  16. studyRoom.calculateArea()

结果为:

  1. Area of Room = 1309.0

在上面的实例中,我们创建了一个名为 Room 的类,其中包含:

  • 属性:lengthbreadth

  • 方法:calculateArea()

在这里,我们从 Room 类创建了一个名为 studyRoom 的对象。然后,我们使用该对象为属性赋值:length 长度和 breadth 宽度。

注意,我们还使用对象调用类内的方法

  1. room1.calculateArea()

在这里,我们使用了 . 符号来调用该方法。最后,执行方法中的语句。


Swift 初始化

前面我们给类属性指定了一个默认值。

  1. class Bike {
  2. var name = ""
  3. }
  4. ...
  5. // create object
  6. var bike = Bike()

但是,我们也可以使用初始化。例如,

在这里,init() 是用于赋值名称变量值的初始值设定项。我们已经使用了 self.name 引用 bike1 对象的 name 属性。

如果我们使用初始值设定项来初始化类内的值,则需要在类的对象创建过程中传递相应的值。

var bike1 = Bike(name: "Mountain Bike")

这里,

  • "Mountain Bike" 传递给 init()name 参数
  • self 表示 bike1 对象
  • self.name 相当于 Mountain Bike
实例
  1. class Bike {
  2. // properties with no default values
  3. var name: String
  4. var gear: Int
  5. // assign value using initializer
  6. init(name: String, gear: Int){
  7. self.name = name
  8. self.gear = gear
  9. }
  10. }
  11. // object of Person with custom initializer
  12. var bike1 = Bike(name: "BMX Bike", gear: 2)
  13. print("Name: \(bike1.name) and Gear: \(bike1.gear)")

结果为:

  1. Name: BMX Bike and Gear: 2

在上面的实例中,我们创建了名为 Bike 的类,它有两个属性 namegear

我们已经使用自定义初始值设定项为类的属性赋值。

最后,在创建 Bike 类的对象时,我们传递了值 "BMX Bike"2 作为参数。


Swift 中的结构与类别

尽管 结构 的工作方式看起来很相似,但它们之间还是存在一些主要差异。

1.类是面向对象编程的概念。因此,它提供了一些 OOP 特性,如继承,在那里我们可以从现有类派生一个新类。

但是,结构的继承不可用。

要了解有关继承的更多信息,请访问 Swift inheritance

2.类为引用类型。这意味着类的每个实例共享相同的数据副本。例如,

  1. class Bike {
  2. var color: String
  3. init(color:String) {
  4. self.color = color
  5. }
  6. }
  7. var bike1 = Bike(color: "Blue")
  8. var bike2 = bike1
  9. bike1.color = "Red"
  10. print(bike2.color) // prints Red

正如您在这里看到的,我们正在更改 bike1 对象的颜色。但是,也会更改 bike2 对象的颜色。

另一方面,结构属于值类型。这意味着结构的每个实例都有一个独立的数据副本。例如,

  1. struct Bike {
  2. var color: String
  3. init(color:String) {
  4. self.color = color
  5. }
  6. }
  7. var bike1 = Bike(color: "Blue")
  8. var bike2 = bike1
  9. bike1.color = "Red"
  10. print(bike2.color) // prints blue

正如您在这里看到的,我们正在更改 bike1 对象的 color。但是,bike2 对象的 color 不变。