返回

Swift进阶教程(三):深入探索属性

IOS

深入 Swift 属性

Swift中的属性是类、结构体和枚举类型的数据成员。它们用于存储与实例相关的数据,并提供访问和操作这些数据的机制。属性可以是存储属性、计算属性、延迟存储属性、类型属性或观察器。

存储属性

存储属性是作为实例一部分存储在内存中的常量或变量。它们由var(变量存储属性)或let(常量存储属性)引入。

变量存储属性

变量存储属性可以修改其值,如下所示:

struct Point {
    var x: Int
    var y: Int
}

var point = Point(x: 10, y: 20)
point.x = 15 // 修改变量属性

常量存储属性

常量存储属性的值在初始化后不能被修改,如下所示:

struct Rectangle {
    let width: Int
    let height: Int
}

let rectangle = Rectangle(width: 10, height: 20)
//rectangle.width = 15 // 错误:常量属性不能修改

计算属性

计算属性是根据其他属性或常量计算得出的属性。它们没有存储的属性,而是通过get访问器方法计算得出。

struct Circle {
    var radius: Double
    
    var area: Double {
        return Double.pi * radius * radius
    }
}

let circle = Circle(radius: 5.0)
print(circle.area) // 输出:78.53981633974483

延迟存储属性

延迟存储属性是在第一次访问时才初始化的属性。它们使用lazy关键字引入。

struct Person {
    lazy var fullName: String = {
        return "\(firstName) \(lastName)"
    }()
    
    var firstName: String
    var lastName: String
}

let person = Person(firstName: "John", lastName: "Smith")
print(person.fullName) // 输出:John Smith

类型属性

类型属性是与类型本身关联的属性,而不是特定实例。它们使用static关键字引入。

class MyClass {
    static var sharedInstance: MyClass = MyClass()
}

let instance = MyClass.sharedInstance // 访问类型属性

观察器

观察器是当属性值发生变化时触发的代码块。它们使用willSet和didSet关键字引入。

struct User {
    var name: String {
        willSet {
            print("即将修改 name 为 \(newValue)")
        }
        didSet {
            print("已修改 name 为 \(name)")
        }
    }
}

var user = User(name: "John")
user.name = "Mary"
// 输出:
// 即将修改 name 为 Mary
// 已修改 name 为 Mary

结论

Swift中的属性提供了强大的机制来存储、计算和操作数据。了解不同类型的属性及其用法对于有效地设计和实现Swift代码至关重要。通过熟练掌握属性,您可以编写可维护、高效且可扩展的应用程序。