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 classclass Bike {var name = ""var gears = 0}// create object of classvar bike1 = Bike()
在这里,bike1 是类的对象。现在,我们可以使用这个对象访问类属性。
使用对象访问类属性
我们使用 . 符号来访问类的属性。例如,
// modify the name propertybike1.name = "Mountain Bike"// access the gear propertybike1.gears
这里,我们使用了 bike1.name 和 bike.gears 分别更改和访问 name 和 gears 属性的值。
实例:类和对象
// define a classclass Bicycle {// define two propertiesvar name = ""var gears = 0}// create instance of Personvar bike1 = Bicycle()// access properties and assign new valuesbike1.gears = 11bike1.name = "Mountain Bike"print("Name: \(bike1.name), Gears: \( bike1.gears) ")
结果为:
Name: Mountain Bike, Gears: 11
在上面的例子中,我们用两个属性定义了名为 Bike 的类:name 和 gears。
我们还创建了 Bike 类的对象 bike1。
最后,我们使用 .notation 访问和修改了对象的属性。
创建类的多个对象
我们还可以从一个类创建多个对象。例如,
// define a classclass Employee {// define a propertyvar employeeID = 0}// create two objects of the Employee classvar employee1 = Employee()var employee2 = Employee()// access property using employee1employee1.employeeID = 1001print("Employee ID: \(employee1.employeeID)")// access properties using employee2employee2.employeeID = 1002print("Employee ID: \(employee2.employeeID)")
结果如下:
Employee ID: 1001Employee ID: 1002
在上面的实例中,我们创建了 Employee 类的两个对象 employee1 和 employere2。
Swift 类中的函数
我们还可以在 Swift 类中定义函数。在类中定义的 Swift 函数 称为方法。
让我们看一个实例,
// create a classclass Room {var length = 0.0var breadth = 0.0// method to calculate areafunc calculateArea() {print("Area of Room =", length * breadth)}}// create object of Room classvar studyRoom = Room()// assign values to all the propertiesstudyRoom.length = 42.5studyRoom.breadth = 30.8// access method inside classstudyRoom.calculateArea()
结果为:
Area of Room = 1309.0
在上面的实例中,我们创建了一个名为 Room 的类,其中包含:
属性:
length和breadth方法:
calculateArea()
在这里,我们从 Room 类创建了一个名为 studyRoom 的对象。然后,我们使用该对象为属性赋值:length 长度和 breadth 宽度。
注意,我们还使用对象调用类内的方法
room1.calculateArea()
在这里,我们使用了 . 符号来调用该方法。最后,执行方法中的语句。
Swift 初始化
前面我们给类属性指定了一个默认值。
class Bike {var name = ""}...// create objectvar 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 valuesvar name: Stringvar gear: Int// assign value using initializerinit(name: String, gear: Int){self.name = nameself.gear = gear}}// object of Person with custom initializervar 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: Stringinit(color:String) {self.color = color}}var bike1 = Bike(color: "Blue")var bike2 = bike1bike1.color = "Red"print(bike2.color) // prints Red
正如您在这里看到的,我们正在更改 bike1 对象的颜色。但是,也会更改 bike2 对象的颜色。
另一方面,结构属于值类型。这意味着结构的每个实例都有一个独立的数据副本。例如,
struct Bike {var color: Stringinit(color:String) {self.color = color}}var bike1 = Bike(color: "Blue")var bike2 = bike1bike1.color = "Red"print(bike2.color) // prints blue
正如您在这里看到的,我们正在更改 bike1 对象的 color。但是,bike2 对象的 color 不变。