Swift 中的延迟存储过程


在本教程中,您将学习有关延迟存储过程的知识。什么是 lazy 关键字以及如何在 Swift 中使用它?让我们学习一下。

在 iOS 开发中,处理复杂对象非常常见。但是您需要在真正需要时才使用它们。

在 Swift 中,有一些声明修饰符可以修改声明的行为。lazy 修饰符就是一个例子,它用于修改类或结构体存储变量的含义。

什么是 Swift 的存储属性?

在 Swift 中,存储属性是包含类或结构体实例值的属性。存储属性可以是变量或常量。您可以在定义时提供默认值。您也可以在初始化期间修改初始值。

延迟存储属性

lazy var 是一种属性,其初始值在第一次调用之前不会计算。它也是属性的一部分,在其中我们有其他属性,如常量、计算属性和可变属性。

请记住,延迟属性必须始终声明为使用 var 关键字的变量,而不是常量。这是因为它的初始值可能在实例初始化完成后才被检索。常量属性必须在初始化完成之前始终具有值,因此不能声明为延迟属性。

什么是 Swift 中的 lazy var?

用它的名称来描述什么是延迟变量会更准确。这意味着初始值在第一次被调用或使用之前不会被计算。

换句话说,延迟变量按需初始化。

确实,您只能在类或结构体中使用延迟变量。

让我们通过一个例子来看一下:

示例

struct Student { var rollNumber: Int var name: String lazy var uniqueId: String = { "ID_\(name)_\(rollNumber)" }() } // Instance creation var amit = Student(rollNumber: 12009, name: "Amit") print(amit.uniqueId)

输出

ID_Amit_12009

解释

在上面的示例中,我们创建了一个名为 Student 的结构体,它具有一些存储属性和一个延迟属性。我们定义了一个延迟变量来创建和获取唯一的 ID。

当您创建此 Student 结构体的实例时,存储属性将使用它们的初始值进行初始化。但是,名为 uniqueId 的延迟属性不会被初始化。所以现在问题是它什么时候会被初始化?

当通过调用延迟属性来读取它时,它将被初始化并返回计算出的字符串类型值。

延迟变量的结构

  • 延迟变量属于类或结构体。延迟变量不能在代码中的任何地方声明。

  • 在 var 之前使用 lazy 关键字修饰符来使变量变为延迟。

  • 延迟变量必须是计算出来的,而不是直接赋值。

    • 一段代码执行计算。

    • 使用花括号声明代码块。

    • 代码块应该返回值。之后,它被赋给延迟变量。

    • 将代码块分配给延迟变量。

  • 在花括号后添加括号 ()。

延迟 var 和计算属性的区别

理解延迟存储属性和计算属性之间的区别非常重要。对于初学者来说,有时很难区分它们。

  • 延迟变量是一种存储属性,其初始化被延迟。初始值仅计算一次。

  • 计算属性是一个没有存储在任何地方的值。相反,它总是按需计算。

延迟变量的限制

在 Swift 中使用延迟变量时,存在一些限制。

  • 延迟变量的使用仅限于结构体和类。

  • 您不能声明延迟常量 (lazy let),因为它的值不能更改。

  • 计算属性不能是延迟变量。这是因为计算属性在每次被调用时都会重新计算。

  • 延迟变量的初始化不是原子操作。因此,延迟变量不是线程安全的。

结论

您学习了存储属性和延迟存储属性。这些在您的代码库中非常有用且重要。深入学习并更多地练习延迟存储属性。

更新于: 2022年11月22日

4K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告