在Swift语言的学习体系里,属性与方法是构建类、结构体和枚举的重要组成部分,它们赋予了这些类型状态和行为,深入理解其特性与用法,对编写高质量的Swift代码十分关键。
一、属性:存储与计算状态
(一)存储属性
存储属性用于存储值,就像类或结构体的“数据仓库”。在类和结构体中都可以定义存储属性。例如,定义一个Point结构体来表示二维坐标:
struct Point {
var x: Int
var y: Int
}
var point = Point(x: 5, y: 10)
print("点的坐标: (\(point.x), \(point.y))")
这里的x和y就是存储属性,用于保存点在坐标系中的位置信息。存储属性可以有默认值,比如:
struct Size {
var width: Double = 10.0
var height: Double = 20.0
}
这样在创建Size实例时,如果不指定值,就会使用默认值。
(二)计算属性
计算属性不直接存储值,而是通过计算得出结果,类似于一个“智能的取值器”。它更像是一个方法,但使用起来像属性。以计算矩形面积为例:
struct Rectangle {
var width: Double
var height: Double
var area: Double {
return width * height
}
}
let rectangle = Rectangle(width: 5.0, height: 3.0)
print("矩形面积: \(rectangle.area)")
这里的area就是计算属性,每次访问它时,都会根据width和height计算出面积。计算属性还可以有setter和getter,实现对属性值的自定义读写操作。
(三)属性观察器
属性观察器用于监听属性值的变化,在属性值改变前后执行特定代码。可以为存储属性和通过var定义的计算属性添加属性观察器。比如,当一个人的年龄发生变化时记录日志:
class Person {
var age: Int = 0 {
willSet(newAge) {
print("即将将年龄从\(age)改为\(newAge)")
}
didSet(oldAge) {
if age > oldAge {
print("年龄增加了,增加量为\(age - oldAge)")
} else {
print("年龄减少了,减少量为\(oldAge - age)")
}
}
}
}
let person = Person()
person.age = 25
二、方法:定义行为逻辑
(一)实例方法
实例方法是属于类、结构体或枚举实例的方法,用于操作实例的属性或执行与实例相关的任务。在Point结构体中添加一个移动方法:
struct Point {
var x: Int
var y: Int
mutating func moveBy(dx: Int, dy: Int) {
x += dx
y += dy
}
}
var point = Point(x: 1, y: 1)
point.moveBy(dx: 2, dy: 3)
print("移动后的点坐标: (\(point.x), \(point.y))")
这里的moveBy就是实例方法,mutating关键字用于修饰结构体和枚举的实例方法,因为在方法中修改了自身属性。
(二)类方法
类方法属于类本身,而不是类的实例,使用class关键字(对于类)或static关键字(对于结构体和枚举)定义。比如,定义一个计算正方形面积的类方法:
class Shape {
class func squareArea(sideLength: Double) -> Double {
return sideLength * sideLength
}
}
let area = Shape.squareArea(sideLength: 4.0)
print("正方形面积: \(area)")
类方法常用于定义一些工具性的方法,不需要创建类的实例就能调用 。
Swift语言的属性与方法紧密配合,属性负责管理数据状态,方法负责实现操作逻辑,它们共同构成了类型的完整行为定义。掌握属性的存储、计算和观察机制,以及方法的实例与类层面的运用,能极大提升对Swift语言的驾驭能力 。