Swift中的属性
- 属性的基本定义:在Swift中,类或结构体内的变量和常量称为属性,分为存储属性(存储值)和计算属性(计算值)。
- 计算属性的工作机制:计算属性不存储值,而是提供用于计算值的代码块,包括可选的getter和setter用于获取和设置值。
- 静态属性的使用:静态属性属于类本身而非实例,使用
static
关键字声明,可以通过类名直接访问和修改。
在类或结构体内定义的 Swift 变量或常量 被称为属性。例如,
class Person {
// 定义属性
var name: String = ""
var age: Int = 0
...
}
在这里,Person
类内我们定义了两个属性:
name
- 类型为String
,默认值为""
age
- 类型为Int
,默认值为 0
在学习属性之前,请确保你了解了 Swift 中的 类 和 结构体 的工作原理。
示例 1:Swift 属性
class Person {
// 定义两个属性
var name: String = ""
var age: Int = 0
}
var person1 = Person()
// 给属性赋值
person1.name = "Kevin"
person1.age = 42
// 访问属性
print("姓名:", person1.name)
print("年龄:", person1.age)
输出
姓名: Kevin
年龄: 42
在上述示例中,我们创建了一个名为 Person
的类,它具有两个属性:name
和 age
。
在这里,我们使用对象 person1
来访问这些属性:
person1.name
- 访问name
属性person1.age
- 访问age
属性
注意:上面定义的这些属性也被称为 存储属性,因为它们为 Person
类的每个实例存储实际值。
Swift 计算属性
前面,我们讨论了存储属性,它为每个实例存储值。例如,
class Calculator {
// 定义存储属性
var num1: Int = 0
...
}
这里,num1
是一个存储属性,为 Calculator
的一个实例存储一些值。
然而,还有另一种类型的属性被称为 计算属性。与存储属性不同,计算属性计算值。例如,
class Calculator {
...
// 定义计算属性
var sum: Int {
// 计算值
num1 + num2
}
}
在这里,sum
是一个计算属性,它不存储值,而是计算两个值的加和。
注意:花括号 {..}
表示计算属性的主体。
示例:Swift 计算属性
class Calculator {
// 定义两个存储属性
var num1: Int = 0
var num2: Int = 0
// 定义一个计算属性
var sum: Int {
// 计算值
num1 + num2
}
}
var obj = Calculator()
obj.num1 = 11
obj.num2 = 12
// 读取计算属性的值
print("总和:", obj.sum)
输出
总和: 23
在上述示例中,我们有
- 存储属性:
num1
和num2
- 计算属性:
sum
。
这里,计算属性 sum
计算 num1
和 num2
的加和
var sum: Int {
// 计算值
num1 + num2
}
现在,我们可以通过访问计算属性来访问计算出的值
print("总和:", obj.sum)
计算属性的 Getter 和 Setter
在 Swift 中,我们还可以在计算属性中包含 getter 和 setter。
- getter - 返回计算出的值
- setter - 更改值
让我们看一个示例,
class Calculator {
var num1: Int = 0
var num2: Int = 0
// create computed property
var sum: Int {
// retrieve value
get {
num1 + num2
}
// set new value to num1 and num2
set(modify) {
num1 = (modify + 10)
num2 = (modify + 20)
}
}
}
var obj = Calculator()
obj.num1 = 20
obj.num2 = 50
// get value
print("Get value:", obj.sum)
// provide value to modify
obj.sum = 5
print("New num1 value:", obj.num1)
print("New num2 value:", obj.num2)
Output
Get value: 70
New num1 value: 15
New num2 value: 25
在上面的示例中,我们创建了一个名为 sum
的计算属性。在 sum 中,我们有
1. Getter - 用于获取 num1
和 num2
的和
get {
num1 + num2
}
2. Setter - 用于改变 num1 和 num2 的值
set(modify) {
num1 = (modify + 10)
num2 = (modify + 20)
}
这里,setter 有一个名为 modify
的新值,可以用来设置 num1
和 num2
的新值。
最后,我们使用了,
obj.sum
- 来访问 getterobj.sum = 5
- 来访问 setter
Swift 静态属性
在前面的示例中,我们使用类的对象来访问其属性。然而,我们也可以创建不需要创建对象就能访问和修改的属性。
这些类型的属性被称为静态属性。在 Swift 中,我们使用 static
关键字来创建静态属性。例如,
class University {
// 静态属性
static var name: String = ""
...
}
这里,name
是静态属性。现在要访问和修改静态属性的值,我们使用类名。
// 修改静态属性的值
University.name = "加德满都大学"
Swift 静态属性
class University {
// 静态属性
static var name: String = ""
// 非静态属性
var founded: Int = 0
}
// 创建 University 类的对象
var obj = University()
// 赋值给静态属性
University.name = "加德满都大学"
print(University.name)
// 赋值给非静态属性
obj.founded = 1991
print(obj.founded)
输出
加德满都大学
1991
在 上述示例中,我们有一个静态属性:name
和一个非静态属性 - founded
。这里,
University.name
- 使用类名访问静态属性obj.founded
- 使用类的对象访问非静态属性
静态属性属于类类型(与类相关而非对象),所以我们可以使用类名来访问它们。
注意:类似地,我们也可以在结构体中创建静态属性。结构体中的静态属性属于结构体类型,所以我们使用结构体名称来访问它们。