Swift 属性

在本教程中,我们将借助示例了解 Swift 属性及其类型。

在类或结构中定义的 Swift 变量或常量称为属性。例如,

  1. class Person {
  2. // define properties
  3. var name: String = ""
  4. var age: Int = 0
  5. ...
  6. }

在这里,在 Person 类中,我们定义了两个属性:

  • name - 字符串类型,默认值为 ""
  • age - 默认值为 0Int 类型

在学习属性之前,请确保了解 Swift 中 结构 的工作方式。

实例:swift 属性
  1. class Person {
  2. // define two properties
  3. var name: String = ""
  4. var age: Int = 0
  5. }
  6. var person1 = Person()
  7. // assign values to properties
  8. person1.name = "Kevin"
  9. person1.age = 42
  10. // access properties
  11. print("Name:", person1.name)
  12. print("Age:", person1.age)

结果如下:

  1. Name: Kevin
  2. Age: 42

在上面的例子中,我们创建了一个名为 Person 的类,它有两个属性:nameage

这里,我们使用对象 person1 访问属性

  • person1.name - 访问 name 属性
  • person1.age - 访问 age 属性
注意:我们在上面定义的这些属性也称为存储属性,因为它们存储 Person 类的每个实例的实际值。

Swift 计算属性

前面,我们讨论了存储每个实例值的存储属性。例如,

  1. class Calculator {
  2. // define stored property
  3. var num1: Int = 0
  4. ...
  5. }

在这里,num1 是一个存储的属性,它存储 Calculator 实例的一些值。

然而,还有另一种类型的属性称为计算属性。与存储属性不同,计算属性计算值。例如,

  1. class Calculator {
  2. ...
  3. // define computed property
  4. var sum: Int {
  5. // calculate value
  6. num1 + num2
  7. }
  8. }

这里,sum 是一个计算属性,它不存储值,而是计算两个值的相加。

注意:花括号 {..} 表示计算属性的主体。
实例:swift 计算属性
  1. class Calculator {
  2. // define two stored properties
  3. var num1: Int = 0
  4. var num2: Int = 0
  5. // define one computed property
  6. var sum: Int {
  7. // calculate value
  8. num1 + num2
  9. }
  10. }
  11. var obj = Calculator()
  12. obj.num1 = 11
  13. obj.num2 = 12
  14. // read value of computed property
  15. print("Sum:", obj.sum)

结果为:

  1. Sum: 23

在上面的例子中,我们有

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

这里,计算的属性 sumnum1num2 的相加。

  1. var sum: Int {
  2. // calculate value
  3. num1 + num2
  4. }

现在,我们可以通过访问计算属性来访问计算的值。

  1. print("Sum:", obj.sum)

计算属性的 Getters 和 Setters

在 Swift 中,我们还可以在计算属性中包含 getter 和 setter。

  • getter - 返回计算值
  • setter - 更改值

让我们来看一个实例,

  1. class Calculator {
  2. var num1: Int = 0
  3. var num2: Int = 0
  4. // create computed property
  5. var sum: Int {
  6. // retrieve value
  7. get {
  8. num1 + num2
  9. }
  10. // set new value to num1 and num2
  11. set(modify) {
  12. num1 = (modify + 10)
  13. num2 = (modify + 20)
  14. }
  15. }
  16. }
  17. var obj = Calculator()
  18. obj.num1 = 20
  19. obj.num2 = 50
  20. // get value
  21. print("Get value:", obj.sum)
  22. // provide value to modify
  23. obj.sum = 5
  24. print("New num1 value:", obj.num1)
  25. print("New num2 value:", obj.num2)

结果如下:

  1. Get value: 70
  2. New num1 value: 15
  3. New num2 value: 25

在上面的实例中,我们创建了一个名为 sum 的计算属性。在 sum 中,我们有

  1. Getter - 获取 num1num2 的总和

    1. get {
    2. num1 + num2
    3. }
  2. Setter - 改变 num1num2 的值

    1. set(modify) {
    2. num1 = (modify + 10)
    3. num2 = (modify + 20)
    4. }

这里,setter 有一个名为 modify 的新值,可用于将新值设置为 num1num2

最后,我们使用了,

obj.sum - 访问了 getter

obj.sum = 5 - 访问了 setter


Swift 静态属性

  1. class University {
  2. // static property
  3. static var name: String = ""
  4. // non-static property
  5. var founded: Int = 0
  6. }
  7. // create an object of University class
  8. var obj = University()
  9. // assign value to static property
  10. University.name = "Kathmandu University"
  11. print(University.name)
  12. // assign value to non-static property
  13. obj.founded = 1991
  14. print(obj.founded)

结果如下:

  1. Kathmandu University
  2. 1991

在上面的实例中,我们有一个静态属性:name 和一个非静态属性:founded

  • University.name - 使用类名访问静态属性

  • obj.founded - 使用类的对象访问非静态属性

静态属性是类的类型(与类关联而不是对象),因此我们可以使用类名访问它们。

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