在 Swift 中,属性用于存储值或提供对其他值的访问。Swift 中的属性可以分为存储属性(Stored Properties)和计算属性(Computed Properties)。

存储属性(Stored Properties)

存储属性是在类或结构体中存储常量或变量的地方。它可以是变量存储属性(用 var 定义)或常量存储属性(用 let 定义)。
struct Rectangle {
    var width: Double
    var height: Double
}

var rect = Rectangle(width: 10.0, height: 5.0)
print(rect.width)  // 输出 10.0

rect.width = 15.0
print(rect.width)  // 输出 15.0

计算属性(Computed Properties)

计算属性用于计算一个值,而不是存储它。计算属性可以用于类、结构体和枚举。
struct Circle {
    var radius: Double
    
    // 计算属性
    var diameter: Double {
        get {
            return radius * 2
        }
        set {
            radius = newValue / 2
        }
    }
}

var circle = Circle(radius: 5.0)
print(circle.diameter)  // 输出 10.0

circle.diameter = 20.0
print(circle.radius)  // 输出 10.0

属性观察器(Property Observers)

属性观察器用于在属性值发生改变前后执行代码。属性观察器包括 willSet 和 didSet。
class StepCounter {
    var totalSteps: Int = 0 {
        willSet(newTotalSteps) {
            print("About to set totalSteps to \(newTotalSteps)")
        }
        didSet {
            if totalSteps > oldValue {
                print("Added \(totalSteps - oldValue) steps")
            }
        }
    }
}

let stepCounter = StepCounter()
stepCounter.totalSteps = 100
// 输出:
// About to set totalSteps to 100
// Added 100 steps

延迟存储属性(Lazy Stored Properties)

延迟存储属性是指在第一次被调用时才会计算其初始值的属性。使用 lazy 关键字定义。
class DataManager {
    lazy var fileManager: FileManager = {
        let fm = FileManager()
        // 配置 FileManager
        return fm
    }()
}

let dataManager = DataManager()
// fileManager 还未被创建
print(dataManager.fileManager)
// fileManager 被创建

只读属性(Read-Only Properties)

只读属性只能获取值,不能修改。它们用于计算值或在初始化之后设置值而不允许更改。
struct Circle {
    var radius: Double
    
    // 只读计算属性
    var area: Double {
        return Double.pi * radius * radius
    }
}

var circle = Circle(radius: 3.0)
print(circle.area)  // 输出 28.274333882308138

以上是一些关于 Swift 属性的基本用法。属性是 Swift 中存储和访问值的重要机制,它们可以用于实现类、结构体和枚举中的各种功能。


转载请注明出处:http://www.zyzy.cn/article/detail/14429/Swift