Swift 类(千字长文)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言:Swift 类——构建复杂功能的基石
在 Swift 开发中,类(Class)是面向对象编程的核心概念之一。它如同一座“代码大厦”的蓝图,通过定义属性、方法和行为,帮助开发者高效组织代码逻辑。无论是构建移动应用、服务器端服务,还是复杂的数据处理系统,掌握 Swift 类的设计与应用,都能显著提升代码的可维护性和扩展性。本文将从基础概念到高级技巧,结合实例深入解析 Swift 类的使用方法,帮助开发者系统性地理解这一关键工具。
一、类的定义与实例化:从蓝图到具体对象
1.1 类的定义语法
在 Swift 中,使用 class
关键字定义一个类,并通过大括号包裹其成员属性和方法。例如:
class Dog {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
核心概念解析:
- 属性(Properties):
name
和age
是存储属性,用于存储对象的状态。 - 初始化方法(Initializer):
init
方法负责在创建对象时初始化属性值。 self
关键字:用于区分类的属性与参数的同名变量,避免歧义。
1.2 对象的实例化
通过 ()
符号调用初始化方法,即可创建类的实例:
let myDog = Dog(name: "Buddy", age: 3)
print(myDog.name) // 输出:Buddy
比喻理解:
将类比作“蓝图”,实例化就是用蓝图建造一座具体的房子。每座房子(实例)都拥有独立的属性值,但遵循相同的结构(类定义)。
二、类的属性:存储与计算的双重角色
2.1 存储属性(Stored Properties)
存储属性直接保存值,如 name
和 age
。它们可以在初始化方法中赋值,或通过默认值声明:
class Cat {
var species: String = "Domestic" // 默认值
var weight: Double
init(weight: Double) {
self.weight = weight
}
}
2.2 计算属性(Computed Properties)
计算属性不存储值,而是通过 getter 和 setter 动态计算结果。例如:
class Rectangle {
var width: Double
var height: Double
var area: Double {
return width * height
}
init(width: Double, height: Double) {
self.width = width
self.height = height
}
}
let rect = Rectangle(width: 5, height: 3)
print(rect.area) // 输出:15
比喻理解:
存储属性如同仓库,直接保存物品;计算属性则像计算器,根据现有数据实时生成结果。
三、类的方法:封装行为的逻辑容器
3.1 实例方法(Instance Methods)
实例方法通过 self
访问自身属性,用于操作对象的状态。例如:
class BankAccount {
var balance: Double = 0
func deposit(amount: Double) {
balance += amount
}
func withdraw(amount: Double) -> Bool {
if balance >= amount {
balance -= amount
return true
} else {
return false
}
}
}
let account = BankAccount()
account.deposit(amount: 100)
print(account.balance) // 输出:100
3.2 类方法(Type Methods)
使用 static
或 class
关键字定义的类方法,无需实例即可调用:
class MathHelper {
static func square(number: Int) -> Int {
return number * number
}
}
print(MathHelper.square(number: 5)) // 输出:25
四、继承与多态:构建代码的层级结构
4.1 继承(Inheritance)
通过 :
符号让子类继承父类的属性和方法:
class Animal {
func makeSound() {
print("Animal sound")
}
}
class Dog: Animal {
override func makeSound() {
print("Bark!")
}
}
let dog = Dog()
dog.makeSound() // 输出:Bark!
多态性:子类可以覆盖(Override)父类的方法,实现不同的行为。
4.2 重用与扩展
通过 super
关键字调用父类方法:
class Cat: Animal {
override func makeSound() {
super.makeSound()
print("Meow!") // 扩展父类功能
}
}
五、类的高级特性:扩展与协议
5.1 扩展(Extension)
通过扩展为现有类添加新功能,无需修改原代码:
extension Dog {
func run() {
print("The dog is running!")
}
}
5.2 协议(Protocol)
定义类必须遵循的“合同”,确保一致性:
protocol Drivable {
func drive()
}
class Car: Drivable {
func drive() {
print("Car is driving!")
}
}
六、案例实战:构建一个完整的 Swift 类
6.1 需求场景
设计一个 Student
类,包含以下功能:
- 记录姓名、年龄、成绩
- 计算平均分
- 判断是否及格
6.2 代码实现
class Student {
var name: String
var age: Int
var scores: [Double]
init(name: String, age: Int, scores: [Double]) {
self.name = name
self.age = age
self.scores = scores
}
// 计算属性:平均分
var averageScore: Double {
return scores.reduce(0, +) / Double(scores.count)
}
// 实例方法:判断是否及格
func isPassing() -> Bool {
return averageScore >= 60
}
}
// 使用示例
let alice = Student(name: "Alice", age: 18, scores: [75, 80, 65])
print(alice.averageScore) // 输出:73.333...
print(alice.isPassing()) // 输出:true
结论:掌握 Swift 类,构建灵活的代码架构
通过本文的讲解,我们系统性地探索了 Swift 类的定义、属性、方法、继承、协议等核心概念,并结合案例演示了其实际应用。对于开发者而言,类不仅是代码组织的工具,更是实现复杂功能、复用逻辑、降低耦合度的重要手段。
关键总结:
- 类是面向对象编程的基础,通过封装、继承和多态提升代码的可维护性;
- 属性与方法共同定义了对象的行为与状态,需根据需求合理选择存储或计算属性;
- 继承与协议帮助开发者构建模块化的代码结构,避免重复劳动。
建议读者通过实际项目练习,例如设计一个“图书管理系统”或“购物车”类,进一步巩固对 Swift 类的理解。掌握这些技能后,开发者将能更自信地应对复杂项目开发挑战,为职业成长打下坚实基础。