Swift 中的惰性存储过程
在本教程中,您将学习惰性存储过程。什么是 lazy 关键字以及如何在 Swift 中使用它?让我们一起学习吧。
在 iOS 开发中,处理复杂对象非常常见。但您需要在真正需要时才使用它们。
在 Swift 中,有一些声明修饰符可以修改声明的行为。惰性修饰符的一个例子是用于修改类或结构体存储变量含义的修饰符。
什么是 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 关键字修饰符可使变量变为惰性变量。
惰性变量必须通过计算获得值,而不能直接赋值。
计算由代码块执行。
使用花括号声明代码块。
代码块应该返回一个值。返回值完成后,该值会被赋给惰性变量。
将代码块赋给惰性变量。
在花括号后添加括号 ()。
惰性变量和计算属性的区别
理解惰性存储属性和计算属性的区别至关重要。对于初学者来说,区分它们有时会令人困惑。
惰性变量是一种存储属性,其初始化会被延迟。初始值只计算一次。
计算属性的值不会存储在任何地方。相反,它总是按需计算。
惰性变量的限制
在 Swift 中使用惰性变量有一些限制。
惰性变量的使用仅限于结构体和类。
您不能声明惰性常量 (lazy let),因为这样它的值就不会改变。
计算属性不能是惰性变量。这是因为计算属性在调用时总会重新计算。
惰性变量的初始化不是原子操作。因此,惰性变量不是线程安全的。
结论
您学习了存储属性和惰性存储属性。这些内容在您的代码库中非常有用且非常重要。请深入学习并多加练习惰性存储属性。