斯威夫特的懒惰

前端之家收集整理的这篇文章主要介绍了斯威夫特的懒惰前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么懒惰在这里使用?
extension SequenceType {
    func mapSome<U>(transform: Generator.Element -> U?) -> [U] {
        var result: [U] = []
        for case let x? in lazy(self).map(transform) {
            result.append(x)
        }
        return result
    }
}

此扩展使用返回可选的转换函数,并返回仅包含未转换为nil的值的数组

为什么不使用self.map(转换)?这里有懒惰吗?

它避免了创建中间数组.
self.map(transform)

返回一个包含转换结果的数组
所有序列元素,然后遍历以构建
结果数组包含非零元素.

lazy(self).map(transform)

是一系列变换后的元素,然后是
迭代以获得非零元素.转化的元素
在枚举期间计算. (每次拨打下一个()
懒惰序列通过转换下一个元素产生一个元素
原始序列的元素.)

两种方法都有效.懒惰的方法可能会表现得更好对于大型序列,但这可能取决于许多因素(大小对于数组,无论元素是值还是引用类型,复制数组元素的成本是多少等).适用于小型阵列懒惰的方法可能会因为额外的而变慢高架.在具体的应用程序中,使用Instruments进行分析帮助决定使用哪种方法.

猜你在找的Swift相关文章