在类或结构体内部定义的 Swift 变量或常量称为属性。例如,
class Person {
// define properties
var name: String = ""
var age: Int = 0
...
}
在这里,在 Person
类内部,我们定义了两个属性:
- name - 类型为
String
,默认值为""
- age - 类型为
Int
,默认值为 0
在学习属性之前,请确保您了解 Swift 中 类 和 结构体 的工作原理。
示例 1:Swift 属性
class Person {
// define two properties
var name: String = ""
var age: Int = 0
}
var person1 = Person()
// assign values to properties
person1.name = "Kevin"
person1.age = 42
// access properties
print("Name:", person1.name)
print("Age:", person1.age)
输出
Name: Kevin Age: 42
在上面的示例中,我们创建了一个名为 Person
的类,其中包含两个属性:name 和 age。
在这里,我们使用对象 person1
来访问属性:
person1.name
- 访问 name 属性person1.age
- 访问 age 属性
注意:我们上面定义的这些属性也称为存储属性,因为它们为 Person
类的每个实例存储实际值。
Swift 计算属性
前面,我们讨论了存储属性,它们为每个实例存储值。例如,
class Calculator {
// define stored property
var num1: Int = 0
...
}
在这里,num1 是一个存储属性,它为 Calculator
的实例存储一些值。
但是,还有另一种属性称为计算属性。与存储属性不同,计算属性会计算值。例如,
class Calculator {
...
// define computed property
var sum: Int {
// calculate value
num1 + num2
}
}
在这里,sum 是一个计算属性,它不存储值,而是计算两个值的加法。
注意:花括号 {..}
表示计算属性的主体。
示例:Swift 计算属性
class Calculator {
// define two stored properties
var num1: Int = 0
var num2: Int = 0
// define one computed property
var sum: Int {
// calculate value
num1 + num2
}
}
var obj = Calculator()
obj.num1 = 11
obj.num2 = 12
// read value of computed property
print("Sum:", obj.sum)
输出
Sum: 23
在上面的示例中,我们有:
- 存储属性:num1 和 num2
- 计算属性:sum。
在这里,计算属性 sum 计算 num1
和 num2
的加法。
var sum: Int {
// calculate value
num1 + num2
}
现在,我们可以通过访问计算属性来访问计算值:
print("Sum:", obj.sum)
计算属性的 Getters 和 Setters
在 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)
输出
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 property
static var name: String = ""
...
}
在这里,name 是静态属性。现在要访问和修改静态属性的值,我们使用类名。
// modify value of the static property
University.name = "Kathmandu University"
Swift 静态属性
class University {
// static property
static var name: String = ""
// non-static property
var founded: Int = 0
}
// create an object of University class
var obj = University()
// assign value to static property
University.name = "Kathmandu University"
print(University.name)
// assign value to non-static property
obj.founded = 1991
print(obj.founded)
输出
Kathmandu University 1991
在上面的示例中,我们有一个静态属性:name 和一个非静态属性 - founded。在此:
University.name
- 使用类名访问静态属性obj.founded
- 使用类的对象访问非静态属性
静态属性是类类型(与类关联,而不是对象),因此我们可以使用类名来访问它们。
注意:同样,我们也可以在结构体中创建静态属性。结构体中的静态属性是结构体类型,因此我们使用结构体名称来访问它们。