一尘不染

如果“ let”关键字用于快速定义常量/不变量,那么“ static”关键字有什么用?

swift

我对在swift中使用 static 关键字有些困惑。众所周知,swift引入了 let
关键字来声明不可变对象。就像声明表视图单元格的ID一样,该ID在其生命周期中很可能不会发生变化。现在在一些类似struct的声明中使用 static
关键字是什么:

struct classConstants
{
    static let test = "test"
    static var totalCount = 0
}

关键字做同样的事情。在目标C中,我们使用static声明了一些常量,例如

static NSString *cellIdentifier=@"cellId";

除了让我更好奇的是,还使用了 static 关键字以及 letvar
关键字。有人可以解释一下该静态关键字在哪里使用吗?更重要的是,我们真的需要快速 静态化 吗?


阅读 235

收藏
2020-07-07

共1个答案

一尘不染

我将为您分解它们:

  • var :用于创建变量
  • let :用于创建常量
  • static:用于创建类型属性与任一letvar。这些在类的所有对象之间共享。

现在,您可以结合起来以得到期望的结果:

  • static let key = "API_KEY" :常量的类型属性
  • static var cnt = 0 :类型属性是一个变量
  • let id = 0 :常量(只能分配一次,但可以在运行时分配)
  • var price = 0 :变量

因此,将所有内容归纳为var,让我们定义可变性,而让它们保持静态,缺少定义范围。您可能会static var用来跟踪已创建的实例数,而您可能只想使用var价格因对象而异的对象。希望这能使事情变得顺利。

示例代码:

class MyClass{
    static let typeProperty = "API_KEY"
    static var instancesOfMyClass = 0
    var price = 9.99
    let id = 5

}

let obj = MyClass()
obj.price // 9.99
obj.id // 5

MyClass.typeProperty // "API_KEY"
MyClass.instancesOfMyClass // 0
2020-07-07