Swift中的类与对象
- 类和对象的基本概念:Swift 中的类是对象的蓝图,定义了对象的属性(变量)和方法(函数)。对象是类的实例,用于访问和操作类定义的数据和行为。
- 创建和使用类与对象:使用
class
关键字定义类,创建对象时使用类名()
。对象通过点符号(.
)访问类的属性和方法。 - 初始化器和类与结构体的区别:类可以使用初始化器(
init
)来设置属性的值。与结构体相比,类是引用类型(共享同一数据副本),而结构体是值类型(每个实例有独立的数据副本)。
Swift 也是一种面向对象的编程语言。与其他面向对象的编程语言一样,它也支持对象和类的概念。
对象简单来说是数据(变量)和方法(函数)的集合。类似地,类是对象的蓝图。
在了解对象之前,让我们先了解 Swift 中的类。
Swift 类
类被视为对象的蓝图。我们可以将类想象为房屋的草图(原型)。它包含了关于楼层、门窗等所有细节。根据这些描述我们建造房屋。房屋就是对象。
由于可以根据同一描述建造多座房屋,我们可以从一个类创建多个对象。
定义 Swift 类
我们使用 class 关键字在 Swift 中创建类。例如,
class ClassName {
// 类定义
}
这里,我们创建了一个名为 ClassName 的类。
让我们看一个例子,
class Bike {
var name = ""
var gear = 0
}
这里,
Bike
- 类的名称name/gear
- 类内部的变量 ,分别默认值为""
和 0。
注意:类内部的变量和常量被称为属性。
Swift 对象
对象是类的一个实例。例如,假设 Bike
是一个类,那么我们可以从这个类创建 bike1
、bike2
等对象。
以下是创建对象的语法。
var objectName = ClassName()
让我们看一个例子,
// 创建类
class Bike {
var name = ""
var gears = 0
}
// 创建类的对象
var bike1 = Bike()
这里,bike1
是类的一个对象。现在,我们可以使用这个对象访问类的属性。
使用对象访问类属性
我们使用 .
符号访问类的属性。例如,
// 修改 name 属性
bike1.name = "山地自行车"
// 访问 gear 属性
bike1.gears
这里,我们用 bike1.name
和 bike.gears
分别改变和访问 name
和 gears
属性的值。
示例:Swift 类和对象
// 定义一个类
class Bicycle {
// 定义两个属性
var name = ""
var gears = 0
}
// 创建 Person 的实例
var bike1 = Bicycle()
// 访问属性并赋予新值
bike1.gears = 11
bike1.name = "山地自行车"
print("名称: \(bike1.name), 变速器: \(bike1.gears)")
输出
名称: 山地自行车, 变速器: 11
在上述示例中,我们定义了一个名为 Bike
的类,它有两个属性:name
和 gears
。
我们还创建了一个名为 bike1
的 Bike
类的对象。
最后,我们使用 .
符号访问并修改了对象的属性。
创建类的多个对象
我们也可以从单个类中创建多个对象。例如,
// 定义一个类
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
类的对象 employee1
和 employee2
。
注意: 我们可以创建尽可能多的结构实例。
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
的类,其中包含:
- 属性:
length
和breadth
- 方法:
calculateArea()
这里,我们从 Room
类创建了一个名为 studyRoom
的对象。然后我们使用该对象为属性:length
和 breadth
赋值。
注意我们还使用了该对象来调用类内的方法
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
的类,它有两个属性 name
和 gear
。
我们使用了自定义初始化器为类的属性赋值。
最后,在创建 Bike
类的对象时,我们传递了 "BMX 自行车"
和 2 作为参数。
Swift 中的结构体与类
尽管结构体和类的工作看起来相似,但它们之间存在一些主要差异。
- 类是面向对象编程的概念。因此,它提供了一些 OOP 功能,如继承,我们可以从现有类派生新类。
但是,结构体的继承不可用。
要了解更多关于继承的信息,请访问 Swift 继承。
- 类是引用类型。这意味着每个类的实例共享相同的数据副本。例如,
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
对象的颜色保持不变。