使用懒惰延迟计算

作为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]
打印(元素)

如果将以上代码复制并粘贴到操场上,它将显示为了获取元素,数组映射函数仅执行一次。

尽情享受lazy并在下面的评论中分享有关函数式编程的技巧!