当前位置: 首页 > 面试题库 >

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

诸福
2023-03-14
问题内容

我对在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
关键字。有人可以解释一下该静态关键字在哪里使用吗?更重要的是,我们真的需要快速 静态化 吗?


问题答案:

我将为您分解它们:

  • 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


 类似资料:
  • 在Objective C中,我们使用static来声明一些常量,如 此外,更让我好奇的是static关键字和let以及var关键字的使用。谁能解释一下这个静态关键字在哪里用?更重要的是,在SWIFT中我们真的需要静态吗?

  • 问题内容: 今天的工作中,我遇到了volatileJava中的关键字。不太熟悉,我找到了这种解释。 鉴于该文章详细解释了所讨论的关键字,您是否曾经使用过它,或者是否曾见过可以正确使用此关键字的情况? 问题答案: volatile具有内存可见性的语义。基本上,volatile字段的值对所有读取器(尤其是其他线程)可见,在该字段上完成写操作之后。没有volatile,读者可能会看到一些未更新的值。 要

  • 具体来说,我正在尝试这个代码: 但它给出了错误 无法访问静态方法main中的非静态字段 所以我把的声明改为: 它起作用了。把这个关键字放在声明之前意味着什么?它到底会对这个对象做什么和/或限制什么?

  • 我们可以编写包含或不包含的代码,如下所示。 或 的实际用途是什么?。这是内存效率更高还是可读性更强?

  • 问题内容: 我正在网上关注Java教程,尝试学习该语言,并且它在使用数组的两种语义之间反弹。 和: 该教程从未真正提到过为什么它会在两者之间来回切换,所以我对该主题进行了一些搜索。我目前的理解是,操作员正在创建“ longs数组”类型的对象。我 不 明白的是为什么我要那个,那有什么后果? 是否存在某些特定于“数组”的方法,除非它是“数组对象”,否则这些方法对数组不起作用? 有什么我 不能 用普通数

  • 问题内容: 怎么办?例如在函数中: 问题答案: 如果使用(或-ea简称)启动程序,则此语句 相当于 如果不使用此选项启动程序,则assert语句将无效。 例如,;在你的问题中发布的,等同于 (如果你启动的是。) Java语言规范assert正式为:14.10。该声明说: 14.10。的声明 的断言是一个含有一个布尔表达式语句。断言是启用还是禁用。如果启用了断言,则断言的执行将导致对布尔表达式进行求