📜  Swift-属性(1)

📅  最后修改于: 2023-12-03 15:05:26.297000             🧑  作者: Mango

Swift-属性

在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!
属性观察器

属性观察器是指用于监视属性值的改变并执行自定义行为的代码块。属性观察器可以用于存储属性和计算属性,可以在属性值改变之前或之后执行。

属性观察器可以设置在以下两个位置:

  • willSet代码块在属性值被设置为新值之前执行
  • didSet代码块在属性值被设置为新值之后执行
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