Swift 类和对象
在本教程中,我们将学习 Swift 类,还将学习借助实例创建对象。
Swift 也是一种面向对象的编程语言。而且,与其他 OOP(面对对象) 语言一样,它也支持对象和类的概念。
对象只是数据(变量)和方法(函数)的集合。类似地,类是该对象的蓝图。
在我们学习对象之前,让我们先了解一下 Swift 中的类。
Swift 类
类被视为对象的蓝图。我们可以把这个类看作一个房子的草图(原型)。它包含了关于地板、门、窗等的所有细节。根据这些描述,我们建造了房子。房子是目标。
因为可以用相同的描述创建许多房屋,所以我们可以从一个类中创建许多对象。
定义 Swift 类
我们使用 class
关键字在 Swift 中创建一个类。例如,
class ClassName {
// class definition
}
这里,我们创建了一个名为 ClassName
的类。
让我们看一个例子,
class Bike {
var name = ""
var gear = 0
}
这里,
Bike
- 班级名称name/gear
- 类内的变量,分别具有默认值 “” 和 0。
Swift 对象
对象称为类的实例。例如,假设 Bike
是一个类,那么我们可以从类中创建诸如 bike1
、bike2
等对象。
下面是创建对象的语法。
var objectName = ClassName()
让我们看一个实例,
// create class
class Bike {
var name = ""
var gears = 0
}
// create object of class
var bike1 = Bike()
在这里,bike1
是类的对象。现在,我们可以使用这个对象访问类属性。
使用对象访问类属性
我们使用 .
符号来访问类的属性。例如,
// modify the name property
bike1.name = "Mountain Bike"
// access the gear property
bike1.gears
这里,我们使用了 bike1.name
和 bike.gears
分别更改和访问 name
和 gears
属性的值。
实例:类和对象
// define a class
class Bicycle {
// define two properties
var name = ""
var gears = 0
}
// create instance of Person
var bike1 = Bicycle()
// access properties and assign new values
bike1.gears = 11
bike1.name = "Mountain Bike"
print("Name: \(bike1.name), Gears: \( bike1.gears) ")
结果为:
Name: Mountain Bike, Gears: 11
在上面的例子中,我们用两个属性定义了名为 Bike
的类:name
和 gears
。
我们还创建了 Bike
类的对象 bike1
。
最后,我们使用 .notation
访问和修改了对象的属性。
创建类的多个对象
我们还可以从一个类创建多个对象。例如,
// define a class
class Employee {
// define a property
var employeeID = 0
}
// create two objects of the Employee class
var employee1 = Employee()
var employee2 = Employee()
// access property using employee1
employee1.employeeID = 1001
print("Employee ID: \(employee1.employeeID)")
// access properties using employee2
employee2.employeeID = 1002
print("Employee ID: \(employee2.employeeID)")
结果如下:
Employee ID: 1001
Employee ID: 1002
在上面的实例中,我们创建了 Employee
类的两个对象 employee1
和 employere2
。
Swift 类中的函数
我们还可以在 Swift 类中定义函数。在类中定义的 Swift 函数 称为方法。
让我们看一个实例,
// create a class
class Room {
var length = 0.0
var breadth = 0.0
// method to calculate area
func calculateArea() {
print("Area of Room =", length * breadth)
}
}
// create object of Room class
var studyRoom = Room()
// assign values to all the properties
studyRoom.length = 42.5
studyRoom.breadth = 30.8
// access method inside class
studyRoom.calculateArea()
结果为:
Area of Room = 1309.0
在上面的实例中,我们创建了一个名为 Room
的类,其中包含:
属性:
length
和breadth
方法:
calculateArea()
在这里,我们从 Room
类创建了一个名为 studyRoom
的对象。然后,我们使用该对象为属性赋值:length
长度和 breadth
宽度。
注意,我们还使用对象调用类内的方法
room1.calculateArea()
在这里,我们使用了 .
符号来调用该方法。最后,执行方法中的语句。
Swift 初始化
前面我们给类属性指定了一个默认值。
class Bike {
var name = ""
}
...
// create object
var bike = Bike()
但是,我们也可以使用初始化。例如,
在这里,init()
是用于赋值名称变量值的初始值设定项。我们已经使用了 self.name
引用 bike1
对象的 name 属性。
如果我们使用初始值设定项来初始化类内的值,则需要在类的对象创建过程中传递相应的值。
var bike1 = Bike(name: "Mountain Bike")
这里,
- "Mountain Bike" 传递给
init()
的name
参数 - self 表示
bike1
对象 self.name
相当于 Mountain Bike
实例
class Bike {
// properties with no default values
var name: String
var gear: Int
// assign value using initializer
init(name: String, gear: Int){
self.name = name
self.gear = gear
}
}
// object of Person with custom initializer
var bike1 = Bike(name: "BMX Bike", gear: 2)
print("Name: \(bike1.name) and Gear: \(bike1.gear)")
结果为:
Name: BMX Bike and Gear: 2
在上面的实例中,我们创建了名为 Bike
的类,它有两个属性 name
和 gear
。
我们已经使用自定义初始值设定项为类的属性赋值。
最后,在创建 Bike
类的对象时,我们传递了值 "BMX Bike" 和 2 作为参数。
Swift 中的结构与类别
尽管 结构 和 类 的工作方式看起来很相似,但它们之间还是存在一些主要差异。
1.类是面向对象编程的概念。因此,它提供了一些 OOP 特性,如继承,在那里我们可以从现有类派生一个新类。
但是,结构的继承不可用。
要了解有关继承的更多信息,请访问 Swift inheritance。
2.类为引用类型。这意味着类的每个实例共享相同的数据副本。例如,
class Bike {
var color: String
init(color:String) {
self.color = color
}
}
var bike1 = Bike(color: "Blue")
var bike2 = bike1
bike1.color = "Red"
print(bike2.color) // prints Red
正如您在这里看到的,我们正在更改 bike1
对象的颜色。但是,也会更改 bike2
对象的颜色。
另一方面,结构属于值类型。这意味着结构的每个实例都有一个独立的数据副本。例如,
struct Bike {
var color: String
init(color:String) {
self.color = color
}
}
var bike1 = Bike(color: "Blue")
var bike2 = bike1
bike1.color = "Red"
print(bike2.color) // prints blue
正如您在这里看到的,我们正在更改 bike1
对象的 color。但是,bike2
对象的 color 不变。