我对在Swift中使用static关键字有点困惑。正如我们所知,Swift引入了let关键字来声明不可变对象。就像声明一个表视图单元格的id,它在其生命周期中很可能不会改变。现在,在一些结构体声明中使用static关键字有什么用呢?
struct classConstants
{
static let test = "test"
static var totalCount = 0
}
字符串
而let关键字做同样的事情。在Objective C中,我们使用static来声明一些常量,如
static NSString *cellIdentifier=@"cellId";
型
此外,让我更好奇的是,static关键字沿着与let和var关键字一起使用。有人能解释一下在哪里使用这个static关键字吗?更重要的是,我们真的需要static吗?
7条答案
按热度按时间yiytaume1#
让我解释给那些需要E-C参考的人。
希望你们都记得,我们在我们的CNET-C项目中使用了一个常量文件来保存所有静态API键,如下所示。
字符串
这里的关键字Static并不意味着kNSStringConst是一个常量,它只是定义了kNSStringConst可以全局访问。关键字const使其成为常量。
现在让我们转向Swift。
在Swift中,Static let和Static var被认为是Type Properties,这意味着它们可以通过其类型进行访问。
例如:
型
在这个例子中,两个属性有static关键字,一个是常量,另一个是变量。
1.正如你所看到的,声明的常量Static let可以通过它的类型访问,但是不能被改变。
1.声明的Static var不仅可以通过其类型访问,还可以修改。因此,所有未来的示例都将被更改。
bjg7j2ky2#
Swift's property(https://stackoverflow.com/a/60913330/4770877)
var vs let(https://stackoverflow.com/a/59219124/4770877)的
class vs static(https://stackoverflow.com/a/59236762/4770877)的
简单地说,
class
和static
是type属性,属于Type的一个副本wbgh16ku3#
我将为你分解它们:
var
:用于创建变量let
:用于创建常量static
:用于创建let
或var
的类型属性。这些属性在类的所有对象之间共享。现在你可以合并来获得所需的出来:
static let key = "API_KEY"
:类型属性为常量static var cnt = 0
:类型属性是变量let id = 0
:常量(只能赋值一次,但可以在运行时赋值)var price = 0
:变量所以总结一下var,让我们定义可变性,而静态和缺乏定义作用域。你可能会使用
static var
来跟踪你创建了多少个示例,而你可能只想使用var
,因为价格因对象而异。希望这能让事情变得清楚一点。示例代码:
字符串
k75qkfdt4#
一个静态变量在一个类的所有示例中共享。把这个例子扔到操场上:
字符串
当您更改静态属性的变量时,该属性现在在所有将来的示例中都将更改。
kg7wmglp5#
静态变量属于一个类型而不是类的示例。你可以通过使用类型的全名来访问静态变量。
代码:
字符串
希望这对你有帮助。
jdzmm42g6#
要了解类型属性和/或方法与类属性和/或方法之间的区别,请查看apple docs中的这个自我解释的示例
字符串
静态属性只能在类型上声明,不能全局声明。换句话说,在Swift中,静态属性===类型属性。要声明类型属性,必须使用static关键字。
l3zydbqr7#
**“let关键字定义了一个常量”**对于来自C#背景的初学者(比如我)来说是令人困惑的。在C#术语中,你可以把“let”看作是“只读”变量。
(回复How exactly does the “let” keyword work in Swift?)
同时使用
static
和let
定义常量字符串
每当我使用
let
来定义常量时,感觉就像我在使用C#的readonly
。所以,我在swift中同时使用static
和let
来定义常量。