Tag: 懒惰

迅捷的懒惰属性

什么是惰性关键字? lazy关键字使您可以延迟存储属性的初始化,直到首次访问它为止。 您只能在结构或类中使用惰性。 //如果尝试在结构或类之外的属性上使用惰性,编译器会吐出错误: 惰性仅对结构或类的成员有效 您为什么要使用它? 有时无法初始化存储的属性,因为其值取决于尚未初始化的代码的其他部分,或者应在首次访问该属性之前不进行初始化,以便节省内存并提高速度甚至防止您的应用崩溃(例如从数据库中获取和/或排序数据) 在类中使用惰性属性 要看的东西: 惰性关键字 :使用此关键字延迟变量的初始化 使用闭包 :由于该属性的目的是延迟某些代码的执行,并且计算后的属性不能进行延迟初始化,因此我们使用闭包来初始化对象 ()在闭包末尾:这是闭包自身执行的方式。 如果不使用(),则只能将闭包分配给该变量而不执行它 初始化importFromDatabase类时,不会初始化lazy属性 当您调用lazy属性时,闭包将被执行 我在学习有关此问题时遇到了一些问题: 可以将lazy与常量一起使用吗? 不,您不能这样做,因为惰性属性的值仅在初始化后才计算,而常量则需要一个值 它对计算属性起作用吗? 不可以,因为总是重新计算一个计算属性,而惰性属性在初始化时仅计算一次。 为什么使用闭包? 由于该属性旨在执行代码,因此闭包是必经之路 为什么要使用惰性属性? 初始化对象时延迟执行代码

使用懒惰延迟计算

作为iOS开发人员,您可能已经听说过用于初始化的lazy关键字-除非有人真的想要与之交互,否则不会创建惰性组件。 那真lazy 作品:推迟工作直到需要做为止。 实际上,我们可以做更多的事情。 不仅用于属性初始化,还用于Swift函数编程中的计算。 让我们看看它是如何工作的。 假设我们有一个由整数组成的数组,并且我们要求结果的值是原始数组的一个元素的两倍。 这是示例代码: 让数组= [1,2,4,5,3,7] let element = array.map {$ 0 * 2} [3] 打印(元素) 您可能会注意到,我们只需要第3个元素,而我们将数组中所有6个元素的值加倍,这是多余且无用的。 如何解决? 使用lazy 。 Swift提供了一个名为LazySequenceProtocol的协议   ,并且在其扩展名中有一个惰性变量来推迟计算(例如map 和filter 在函数式编程中。 定义如下: ///避免创建多层“ LazySequence”包装器。 ///符合“ LazySequenceProtocol”的所有内容都已经是懒惰的。 扩展LazySequenceProtocol { ///与`self`相同。 public var lazy:自我{得到} } 随着lazy   ,我们可以修复原始代码以使其高效: 让数组= [1,2,4,5,3,7] 让element = array.lazy.map {$ 0 * 2} [3] 打印(元素) […]