Swift 开发教程系列 - 第7章:类与面向对象编程
在 Swift 中,类(class)是一种引用类型,用于定义复杂的数据模型和行为。类可以通过继承和多态实现代码复用,是 Swift 面向对象编程的核心。接下来,我们将了解类的基本定义、属性、方法、继承以及一些高级概念。
7.1 类的定义与实例化
类的定义与结构体类似,但它是引用类型。在 Swift 中,类不自动提供成员初始化器(initializer),需要手动定义初始化方法。
基本定义
class Person {
var name: String
var age: Int
// 自定义初始化方法
init(name: String, age: Int) {
self.name = name
self.age = age
}
// 定义方法
func introduce() {
print("My name is \(name) and I am \(age) years old.")
}
}
// 创建类的实例
let john = Person(name: "John", age: 30)
john.introduce() // 输出:"My name is John and I am 30 years old."
在上例中,Person 类定义了两个属性 name 和 age,并提供了一个方法 introduce 来打印个人信息。
7.2 类的继承
Swift 的类支持继承,可以创建一个子类继承父类的所有属性和方法。子类可以重写父类的方法以提供自定义实现。
示例代码
class Animal {
func sound() {
print("Animal makes a sound")
}
}
class Dog: Animal {
override func sound() {
print("Woof!")
}
}
let dog = Dog()
dog.sound() // 输出:"Woof!"
在上例中,Dog 类继承了 Animal 类,并通过 override 关键字重写了 sound 方法。
7.3 引用类型与值类型的区别
类是引用类型,这意味着当一个类实例被赋值或传递时,不会创建拷贝,而是指向同一个实例。
class Car {
var brand: String
init(brand: String) {
self.brand = brand
}
}
let carA = Car(brand: "Toyota")
let carB = carA
carB.brand = "Honda"
print(carA.brand) // 输出:"Honda"
print(carB.brand) // 输出:"Honda"
在上例中,carA 和 carB 都指向同一个 Car 实例,因此修改 carB 的 brand 属性会影响 carA。
7.4 类的属性
类的属性可以分为存储属性和计算属性。存储属性用于存储固定值,而计算属性用于动态计算并返回值。
示例代码
class Circle {
var radius: Double // 存储属性
// 计算属性
var area: Double {
return 3.14159 * radius * radius
}
init(radius: Double) {
self.radius = radius
}
}
let circle = Circle(radius: 5)
print("Area of the circle: \(circle.area)") // 输出:78.53975
在上例中,area 是一个计算属性,每次访问时都会重新计算圆的面积。
7.5 属性观察器
属性观察器允许你在属性值发生变化时执行特定操作。可以在属性上定义 willSet 和 didSet 观察器,以便在新值被设置之前或之后做出反应。
示例代码
class StepCounter {
var steps: Int = 0 {
willSet {
print("About to set steps to \(newValue)")
}
didSet {
if steps > oldValue {
print("Added \(steps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.steps = 1000 // 输出:"About to set steps to 1000" 和 "Added 1000 steps"
stepCounter.steps = 1500 // 输出:"About to set steps to 1500" 和 "Added 500 steps"
7.6 类的类型属性与类型方法
类型属性和类型方法属于类本身,而不是某个具体实例。使用 static 关键字定义类型属性和类型方法,子类不能重写 static 方法。如果希望子类可以重写,可以使用 class 关键字。
示例代码
class Math {
static let pi = 3.14159
static func square(_ number: Double) -> Double {
return number * number
}
}
print(Math.pi) // 输出:3.14159
print(Math.square(3)) // 输出:9.0
7.7 析构函数(Deinitializer)
析构函数是在实例被销毁时自动调用的函数,用于清理实例。在 Swift 中使用 deinit 关键字定义析构函数。
示例代码
class FileManager {
init() {
print("FileManager initialized")
}
deinit {
print("FileManager deinitialized")
}
}
var manager: FileManager? = FileManager()
manager = nil // 输出:"FileManager deinitialized"
当 manager 被设为 nil 时,FileManager 实例被销毁,触发了 deinit 方法。
通过本章内容,你已了解 Swift 中类的基本使用、继承、属性和析构函数等概念。掌握这些知识后,你可以创建复杂的数据模型并应用面向对象编程思想。下一章我们将探讨协议和扩展,为代码提供更高的灵活性和复用性。
原文地址:https://blog.csdn.net/qq_39653624/article/details/143569790
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!