跳到主要内容

Swift中的类与对象

提示
  1. 类和对象的基本概念:Swift 中的类是对象的蓝图,定义了对象的属性(变量)和方法(函数)。对象是类的实例,用于访问和操作类定义的数据和行为。
  2. 创建和使用类与对象:使用 class 关键字定义类,创建对象时使用 类名()。对象通过点符号(.)访问类的属性和方法。
  3. 初始化器和类与结构体的区别:类可以使用初始化器(init)来设置属性的值。与结构体相比,类是引用类型(共享同一数据副本),而结构体是值类型(每个实例有独立的数据副本)。

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

对象简单来说是数据(变量)和方法(函数)的集合。类似地,类是对象的蓝图。

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

Swift 类

类被视为对象的蓝图。我们可以将类想象为房屋的草图(原型)。它包含了关于楼层、门窗等所有细节。根据这些描述我们建造房屋。房屋就是对象。

由于可以根据同一描述建造多座房屋,我们可以从一个类创建多个对象。

定义 Swift 类

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

class ClassName {
// 类定义
}

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

让我们看一个例子,

class Bike {

var name = ""
var gear = 0
}

这里,

  • Bike - 类的名称
  • name/gear - 类内部的变量,分别默认值为 ""0

注意:类内部的变量和常量被称为属性。

Swift 对象

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

以下是创建对象的语法。

var objectName = ClassName()

让我们看一个例子,

// 创建类
class Bike {

var name = ""
var gears = 0
}

// 创建类的对象
var bike1 = Bike()

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

使用对象访问类属性

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

// 修改 name 属性
bike1.name = "山地自行车"

// 访问 gear 属性
bike1.gears

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

示例:Swift 类和对象

// 定义一个类
class Bicycle {

// 定义两个属性
var name = ""
var gears = 0
}

// 创建 Person 的实例
var bike1 = Bicycle()

// 访问属性并赋予新值
bike1.gears = 11
bike1.name = "山地自行车"

print("名称: \(bike1.name), 变速器: \(bike1.gears)")

输出

名称: 山地自行车, 变速器: 11

在上述示例中,我们定义了一个名为 Bike 的类,它有两个属性:namegears。 我们还创建了一个名为 bike1Bike 类的对象。

最后,我们使用 . 符号访问并修改了对象的属性。

创建类的多个对象

我们也可以从单个类中创建多个对象。例如,

// 定义一个类
class Employee {

// 定义一个属性
var employeeID = 0
}

// 创建 Employee 类的两个对象
var employee1 = Employee()
var employee2 = Employee()

// 使用 employee1 访问属性
employee1.employeeID = 1001
print("员工 ID: \(employee1.employeeID)")

// 使用 employee2 访问属性
employee2.employeeID = 1002
print("员工 ID: \(employee2.employeeID)")

输出

员工 ID: 1001
员工 ID: 1002

在上述示例中,我们创建了两个 Employee 类的对象 employee1employee2

注意: 我们可以创建尽可能多的结构实例。

Swift 类中的函数

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

让我们看一个示例,

// 创建一个类
class Room {

var length = 0.0
var breadth = 0.0

// 计算面积的方法
func calculateArea() {
print("房间面积 =", length * breadth)
}
}

// 创建 Room 类的对象
var studyRoom = Room()

// 为所有属性赋值
studyRoom.length = 42.5
studyRoom.breadth = 30.8

// 访问类内的方法
studyRoom.calculateArea()

输出

房间面积 = 1309.0

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

  • 属性lengthbreadth
  • 方法calculateArea()

这里,我们从 Room 类创建了一个名为 studyRoom 的对象。然后我们使用该对象为属性:lengthbreadth 赋值。

注意我们还使用了该对象来调用类内的方法

room1.calculateArea()

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

Swift 初始化器

之前我们给类属性赋予了默认值。

class Bike {

var name = ""
}
...

// 创建对象
var bike = Bike()

然而,我们也可以使用初始化器初始化值。例如,

class Bike {

var name: String

init(name: String){
self.name = name
}
}

在这里,init() 是一个初始化器,用于为 name 变量赋值。我们使用了 self.name 来引用 bike1 对象的 name 属性。

如果我们在类中使用初始化器来初始化值,我们需要在创建该类的对象时传递相应的值。

var bike1 = Bike(name: "山地自行车")

这里,

  • "山地自行车" 被传递给 init()name 参数
  • self 代表 bike1 对象
  • self.name 等于山地自行车

示例:Swift 初始化器

class Bike {

// 没有默认值的属性
var name: String
var gear: Int

// 使用初始化器赋值
init(name: String, gear: Int){
self.name = name
self.gear = gear
}
}

// 使用自定义初始化器的 Person 对象
var bike1 = Bike(name: "BMX 自行车", gear: 2)

print("名称: \(bike1.name) 和 变速器: \(bike1.gear)")

输出

名称: BMX 自行车 和 变速器: 2

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

我们使用了自定义初始化器为类的属性赋值。

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

Swift 中的结构体与类

尽管结构体和类的工作看起来相似,但它们之间存在一些主要差异。

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

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

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

  1. 类是引用类型。这意味着每个类的实例共享相同的数据副本。例如,
class Bike {
var color: String

init(color:String) {
self.color = color
}
}

var bike1 = Bike(color: "蓝色")

var bike2 = bike1

bike1.color = "红色"
print(bike2.color) // 打印红色

正如你所看到的,我们正在改变 bike1 对象的颜色。但是,bike2 对象的颜色也被改变了。

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

struct Bike {
var color: String

init(color:String) {
self.color = color
}
}

var bike1 = Bike(color: "蓝色")

var bike2 = bike1

bike1.color = "红色"
print(bike2.color) // 打印蓝色

正如你所看到的,我们正在改变 bike1 对象的颜色。但是,bike2 对象的颜色保持不变。