📅  最后修改于: 2023-12-03 15:05:26.297000             🧑  作者: Mango
在Swift中,属性是用于存储值或提供计算值的一种方式。属性可以与类,结构体和枚举一起使用。
存储属性是指存储特定类和结构体实例的常量或变量。存储属性可以是变量存储属性(var)或常量存储属性(let)。它们可以在定义时或初始化后设置。例如:
struct Person {
var name: String
let age: Int
}
var person1 = Person(name: "Alice", age: 25)
person1.name = "Bob"
person1.age = 30 // 编译错误:age是常量
计算属性是没有实际值的属性,它们提供了getter和setter方法,可以通过这些方法获取或设置其他属性或值。计算属性通常用于计算或转换其他属性的值。
struct Student {
var score1: Double
var score2: Double
var totalScore: Double {
return score1 + score2
}
}
var student1 = Student(score1: 80, score2: 90)
print(student1.totalScore) // 输出: 170.0
student1.score1 = 85
print(student1.totalScore) // 输出: 175.0
延迟存储属性是指在第一次访问时才计算其初始值的属性。使用关键字lazy来标识延迟存储属性。延迟存储属性必须是变量存储属性(var)。
延迟存储属性通常用于创建复杂或昂贵的对象,只有在需要时才创建,以节省资源和时间。
class MyClass {
lazy var myProperty: String = {
// 复杂或昂贵的初始化代码
return "Hello, world!"
}()
}
let myObject = MyClass()
print(myObject.myProperty) // 输出: Hello, world!
属性观察器是指用于监视属性值的改变并执行自定义行为的代码块。属性观察器可以用于存储属性和计算属性,可以在属性值改变之前或之后执行。
属性观察器可以设置在以下两个位置:
class MyCounter {
var count: Int = 0 {
willSet(newCount) {
print("将count设置为\(newCount)")
}
didSet {
print("已将count设置为\(count)")
}
}
}
let myCounter = MyCounter()
myCounter.count = 3
// 输出:
// 将count设置为3
// 已将count设置为3
myCounter.count += 1
// 输出:
// 将count设置为4
// 已将count设置为4
类和结构体还可以定义计算类型属性(类似于静态属性),这些属性的值不是每个实例唯一的,而是与类型本身一起共享的。计算静态属性对相同类型的所有实例都是相同的。
struct MyMath {
static var pi: Double {
return 3.1415926535
}
}
print(MyMath.pi) // 输出:3.1415926535