Swift 语言中的存储属性与计算属性:深入解析与实例应用
在 Swift 语言中,属性是类和结构体用来存储数据的地方。属性分为两种:存储属性和计算属性。存储属性用于存储实例的常量和变量,而计算属性则用于根据其他属性计算值。本文将深入探讨 Swift 中的存储属性与计算属性,并通过实例代码展示它们的应用。
一、存储属性
存储属性是类和结构体中用于存储常量和变量的属性。每个存储属性都有一个类型和一个名称,并且可以在初始化时被赋值。
1.1 存储属性的类型
存储属性可以是以下几种类型:
- 基本数据类型(如 Int、Float、Double 等)
- 引用类型(如 String、Array、Dictionary 等)
- 自定义类型(如类、结构体等)
1.2 存储属性的初始化
在类中,存储属性可以在定义时直接初始化,也可以在初始化器中初始化。在结构体中,存储属性必须在初始化器中初始化。
swift
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
struct Size {
var width: Int
var height: Int
init(width: Int, height: Int) {
self.width = width
self.height = height
}
}
二、计算属性
计算属性不存储值,而是根据其他属性或方法计算值。计算属性通常用于获取或设置值,或者根据其他属性计算新的值。
2.1 计算属性的获取和设置
计算属性可以通过 `get` 和 `set` 关键字来定义获取和设置值的逻辑。
swift
class Circle {
var radius: Double
var diameter: Double {
get {
return 2 radius
}
set {
radius = newValue / 2
}
}
init(radius: Double) {
self.radius = radius
}
}
在上面的例子中,`diameter` 是一个计算属性,它根据 `radius` 的值计算直径。`get` 关键字用于定义获取值的逻辑,而 `set` 关键字用于定义设置值的逻辑。
2.2 只读计算属性
只读计算属性只有 `get` 关键字,没有 `set` 关键字,这意味着它的值只能在初始化时被设置,之后不能被修改。
swift
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
}
}
在上面的例子中,`area` 是一个只读计算属性,它根据 `width` 和 `height` 的值计算面积。
三、属性观察器
属性观察器允许你在属性值发生变化时执行代码。Swift 提供了两种属性观察器:`willSet` 和 `didSet`。
3.1 `willSet` 观察器
`willSet` 观察器在属性值即将被设置之前调用,可以访问旧值和新值。
swift
class Person {
var age: Int {
willSet {
print("Age is about to change from (self.age) to (newValue)")
}
didSet {
print("Age has changed from (oldValue) to (age)")
}
}
init(age: Int) {
self.age = age
}
}
在上面的例子中,当 `age` 属性的值发生变化时,`willSet` 和 `didSet` 观察器都会被调用。
3.2 `didSet` 观察器
`didSet` 观察器在属性值被设置之后调用,可以访问新值和旧值。
四、实例应用
以下是一个使用存储属性和计算属性的实例:
swift
class BankAccount {
var balance: Double {
get {
return balance
}
set {
balance = newValue
}
}
var interestRate: Double {
get {
return interestRate
}
set {
interestRate = newValue
}
}
var interestEarned: Double {
get {
return balance interestRate
}
}
init(balance: Double, interestRate: Double) {
self.balance = balance
self.interestRate = interestRate
}
}
let account = BankAccount(balance: 1000, interestRate: 0.05)
print("Initial interest earned: (account.interestEarned)")
account.interestRate = 0.07
print("New interest earned: (account.interestEarned)")
在这个例子中,`BankAccount` 类有三个属性:`balance`、`interestRate` 和 `interestEarned`。`interestEarned` 是一个计算属性,它根据 `balance` 和 `interestRate` 的值计算利息收入。
五、总结
Swift 中的存储属性和计算属性是构建强大和灵活的类和结构体的关键组成部分。通过理解和使用存储属性和计算属性,可以创建出具有丰富功能的对象。本文通过深入解析和实例应用,帮助读者更好地掌握 Swift 中的属性。
Comments NOTHING