如果在Swift中使用"let"关键字定义常量/不可变量,那么"static"关键字有什么用处呢?
如果在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";
更让我感到好奇的是,在let和var关键字之后使用static关键字的用法。有人能解释一下在哪里使用这个static关键字吗?更重要的是,我们真的需要在Swift中使用static吗?
admin 更改状态以发布 2023年5月24日
静态变量是在类的所有实例中共享的。在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
当你更改静态属性的变量时,该属性在所有未来的实例中都将被更改。
我会为您逐一解释:
现在您可以将它们组合起来得到所需的结果:
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