Swift 属性

在类或结构体内部定义的 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 的类,其中包含两个属性:nameage

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

在上面的示例中,我们有:

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

在这里,计算属性 sum 计算 num1num2 的加法。

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 - 获取 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 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 - 使用类的对象访问非静态属性

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

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

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战