跳到主要内容

Swift中的属性

提示
  1. 属性的基本定义:在Swift中,类或结构体内的变量和常量称为属性,分为存储属性(存储值)和计算属性(计算值)。
  2. 计算属性的工作机制:计算属性不存储值,而是提供用于计算值的代码块,包括可选的getter和setter用于获取和设置值。
  3. 静态属性的使用:静态属性属于类本身而非实例,使用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 的类,它具有两个属性:nameage

在这里,我们使用对象 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

在上述示例中,我们有

  • 存储属性:num1num2
  • 计算属性:sum

这里,计算属性 sum 计算 num1num2 的加和

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 - 用于获取 num1num2 的和

get {
num1 + num2
}

2. Setter - 用于改变 num1 和 num2 的值

set(modify) {
num1 = (modify + 10)
num2 = (modify + 20)
}

这里,setter 有一个名为 modify 的新值,可以用来设置 num1num2 的新值。

最后,我们使用了,

  • obj.sum - 来访问 getter
  • obj.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 - 使用类的对象访问非静态属性

静态属性属于类类型(与类相关而非对象),所以我们可以使用类名来访问它们。

注意:类似地,我们也可以在结构体中创建静态属性。结构体中的静态属性属于结构体类型,所以我们使用结构体名称来访问它们。