返回

Swift 5.1:深入理解属性

IOS

引言:

在 Swift 5.1 中,属性是一种强大的机制,它将值与特定的类、结构体或枚举相关联。它们是数据存储和管理的基石,可以根据需要对数据进行存储或计算。通过深入了解属性,开发者可以创建更强大、更灵活的代码。

存储属性:值之锚

存储属性就像数据金库,它们将常量和变量值存储为实例的一部分。这些属性仅由类和结构体支持,它们直接存储值,而不是通过计算派生值。使用 var 声明变量存储属性,而使用 let 关键字声明常量存储属性。

例如,考虑一个 Person 类,它具有存储属性 nameage

class Person {
    var name: String
    let age: Int
}

计算属性:动态计算

计算属性提供了一种计算值的灵活方式,而不必显式存储它们。它们由类、结构体和枚举支持,使用 var 关键字声明,但不存储值。相反,它们使用指定值的 getter 和可选的 setter 来计算值。

例如,一个 Rectangle 结构体可以有一个计算属性 area,它计算矩形的面积:

struct Rectangle {
    var width: Double
    var height: Double

    var area: Double {
        return width * height
    }
}

存储属性类型:灵活选择

存储属性可以采用各种类型,包括基本类型(如整数、浮点数和字符串)、自定义类型(如结构体和枚举)甚至其他属性。这种灵活性允许开发者针对特定需求定制其代码。

例如,一个 ShoppingCart 类可以有一个存储属性 items,它是一个包含 Item 结构体的数组:

class ShoppingCart {
    var items: [Item]
}

属性修饰符:控制访问

属性修饰符允许开发者控制对属性的访问级别。public 修饰符允许从任何地方访问属性,而 private 修饰符仅允许从其定义的类、结构体或枚举内部访问属性。还有 internalfileprivate 修饰符,它们分别将访问限制在同一模块或同一文件内。

例如,一个 Account 类可以有一个 balance 属性,该属性仅对 Account 类自身可见:

class Account {
    private var balance: Double
}

getter 和 setter:自定义访问

getter 和 setter 方法允许开发者自定义对属性的访问。getter 方法获取属性的值,而 setter 方法设置属性的值。通过重写 getter 和 setter,开发者可以执行验证、转换或其他特殊操作。

例如,一个 Temperature 结构体可以有一个 celsius 属性,它允许使用 getter 和 setter 以华氏度或摄氏度设置和获取温度:

struct Temperature {
    private var fahrenheit: Double

    var celsius: Double {
        get {
            return (fahrenheit - 32) * 5 / 9
        }
        set {
            fahrenheit = newValue * 9 / 5 + 32
        }
    }
}

属性监视器:值变化的守卫者

属性监视器是一种强大的机制,它允许开发者在属性值更改时执行特定操作。有两种类型的属性监视器:willSetdidSetwillSet 在设置属性值之前调用,而 didSet 在设置属性值之后调用。

例如,一个 User 类可以有一个 name 属性,当它的值发生更改时触发 didSet 监视器以更新用户配置文件:

class User {
    var name: String {
        didSet {
            updateProfile()
        }
    }
}

结论:

Swift 5.1 中的属性是数据存储和管理的强大工具。通过理解存储和计算属性、属性类型、访问修饰符、getter 和 setter 以及属性监视器,开发者可以构建健壮、灵活和高效的代码。掌握这些概念将使开发者能够充分利用 Swift 语言的强大功能。