使用懒惰延迟计算
作为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
并在下面的评论中分享有关函数式编程的技巧!