如果在Swift中使用"let"关键字定义常量/不可变量,那么"static"关键字有什么用处呢?

11 浏览
0 Comments

如果在Swift中使用"let"关键字定义常量/不可变量,那么"static"关键字有什么用处呢?

我有点困惑在Swift中如何使用static关键字。我们知道,Swift引入了let关键字来声明不可变对象,例如声明表视图单元格的id,在其生命周期内大多数情况下不会改变。那么,在一些结构声明中使用static关键字有什么用呢:

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

let关键字也可以做同样的事情。在Objective C中,我们使用static关键字声明一些常量,如下所示:

static NSString *cellIdentifier=@"cellId";

更让我感到好奇的是,在letvar关键字之后使用static关键字的用法。有人能解释一下在哪里使用这个static关键字吗?更重要的是,我们真的需要在Swift中使用static吗?

admin 更改状态以发布 2023年5月24日
0
0 Comments

静态变量是在类的所有实例中共享的。在playground中尝试以下示例:

class Vehicle {
    var car = "Lexus"
    static var suv = "Jeep"
}
// changing nonstatic variable
Vehicle().car // Lexus
Vehicle().car = "Mercedes"
Vehicle().car // Lexus
// changing static variable
Vehicle.suv // Jeep
Vehicle.suv = "Hummer"
Vehicle.suv // Hummer

当你更改静态属性的变量时,该属性在所有未来的实例中都将被更改。

0
0 Comments

我会为您逐一解释:

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

现在您可以将它们组合起来得到所需的结果:

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

因此,var 和 let 定义了可变性,而 static 和缺乏定义则定义了作用域。您可能会使用 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

0