Skip to content

22.4_类型属性static

什么是类型属性?

类型属性是属于类型本身的属性,而不是该类型任何特定实例的属性。这意味着无论你创建多少个该类型的实例,类型属性都只有一个副本。这与实例属性形成鲜明对比,实例属性是每个实例都拥有的独立副本。想象一下,你有一个班级,每个学生都有自己的书包(实例属性),但教室里只有一个白板(类型属性),所有学生都共享它! 📚

声明类型属性

在 Swift 中,你可以使用 static 关键字来定义类型属性。对于类(class)类型,你也可以使用 class 关键字来定义计算型类型属性,允许子类重写父类的实现。然而,对于存储型类型属性,static 是唯一的选择。这确保了属性的唯一性。

swift
struct SomeStructure {
    static var storedTypeProperty = "一些值。"
    static var computedTypeProperty: Int {
        return 1
    }
}

class SomeClass {
    static var storedTypeProperty = "另一些值。"
    static var computedTypeProperty: Int {
        return 2
    }
    class var overridableComputedTypeProperty: Int {
        return 3
    }
}

你看,声明它们是多么简单! 🚀

访问类型属性

访问类型属性非常直接。你不需要创建类型实例,只需使用类型名称后跟点语法和属性名称即可。这使得访问全局配置或共享数据变得非常方便。例如,如果你有一个 Game 类型,你可能有一个 static var highestScore 来记录所有玩家的最高分。

swift
print(SomeStructure.storedTypeProperty)
// 输出 "一些值。"
SomeStructure.storedTypeProperty = "新值。"
print(SomeStructure.storedTypeProperty)
// 输出 "新值。"
print(SomeClass.computedTypeProperty)
// 输出 "2"

这就像直接在白板上写字一样,无需拿起任何学生的书包! ✍️

类型属性的实际应用

类型属性在许多场景中都非常有用。它们非常适合存储那些不依赖于任何特定实例的值。例如,你可以用它们来:

  • 配置常量:定义应用程序范围内的常量,如 API 密钥或默认设置。
  • 共享状态:管理所有实例共享的单一状态,例如一个计数器,记录某个特定事件发生了多少次。
  • 缓存数据:存储所有实例都可以访问的缓存数据,避免重复计算或网络请求。

例如,一个 Logger 类可能有一个 static var logCount = 0 来跟踪记录了多少条消息。每次调用 log 方法时,logCount 就会增加。这提供了一个清晰的全局视图。 📈

类型属性与实例属性的对比

理解类型属性和实例属性之间的区别至关重要。实例属性是每个实例独有的,而类型属性是所有实例共享的。

  • 实例属性:每个 Car 实例都有自己的 colorspeed
  • 类型属性:所有 Car 实例共享一个 numberOfWheels(假设所有汽车都是四轮的)。

选择哪种属性取决于你的数据是属于单个对象还是整个类型。通常,如果你需要一个所有实例都共享的单一事实来源,那么类型属性就是你的最佳选择! 🌟 掌握这一点,你就能更有效地组织你的代码。

本站使用 VitePress 制作