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),因为它的值不能更改。
计算属性不能是延迟变量。这是因为计算属性在每次被调用时都会重新计算。
延迟变量的初始化不是原子操作。因此,延迟变量不是线程安全的。
结论
您学习了存储属性和延迟存储属性。这些在您的代码库中非常有用且重要。深入学习并更多地练习延迟存储属性。