美文网首页
Swift 懒加载Lazy

Swift 懒加载Lazy

作者: 雨泽Sunshine | 来源:发表于2022-06-23 16:21 被阅读0次

1.Lazy Variables

惰性变量是按需初始化的存储属性,只能在structclass中使用惰性变量。
例如,创建一个带有惰性变量的Person结构来计算BMI:

struct Person {
    var weight: Double
    var height: Double
    
    lazy var BMIIndex: Double = {
        return weight / pow(height, 2)
    }()
}

当初始化Person对象时,BMI不会自动计算。而是在第一次引用的时候才计算:

var jack = Person(weight: 90, height: 120)
print(jack.BMIIndex)

2.Lazy Sequences

Swift标准库中,SequenceTypeCollectionType协议都有个叫lazy的计算属性,它能返回一个特殊的LazySequenceLazyCollection
这些类型只能被用到mapfilterflatMap这样的高阶函数中,而且是以一种惰性的方式。
对于那些不需要完全运行,可能提前退出的情况,使用lazy来进行性能优化效果会非常有效。

func increment(x: Int) -> Int {
    print("访问:\(x)")
    return x + 1
}

let array = Array(0..<10)

print("直接使用map的结果")
let incrementArr = array.map(increment)
print(incrementArr[5])

print("\n使用lazy属性的结果")
let lazyIncrementArr = array.lazy.map(increment)
print(lazyIncrementArr[5])

输出的结果:

直接使用map的结果:
访问:0
访问:1
访问:2
访问:3
访问:4
访问:5
访问:6
访问:7
访问:8
访问:9
6

使用lazy属性的结果:
访问:5
6
  • 直接使用map,所有的输出值都被计算出来了!即使只读了第5个元素。
  • 使用了lazy,仅调用了第5个元素的计算,其他元素计算并不会被调用。

使用lazy后,计算量明显降低很多。如果array的体量更大,且increment更复杂,那么节省的计算量就更明显了。

相关文章

  • swift —— tips swift 中的懒加载实现

    objc objc 对象的懒加载 swift swift 的懒加载 方式 1lazy 保证数据在用到的时候才会被加...

  • Swift:)懒加载Lazy

    OC中,要实现懒加载是用到getter方法,例如 Swift懒加载差别就很大了,懒加载属性用lazy修饰,注意结尾...

  • Swift: lazy 属性的写法

    序言:OC中有懒加载,Swift中用lazy关键字声明属性,也可以实现懒加载。lazy所修饰的属性只有第一次访问时...

  • Swift总结4:UI控件 单例 代理 懒加载 网络请求 闭包

    //懒加载//swift中固定写法lazy var l:UILabel = { //viewDidLoad中vie...

  • swift学习09(懒加载)

    swift中是通过专门的关键字(lazy)来实现懒加载; 一、直接懒加载赋值 二、懒加载赋一个函数 三、懒加载赋一...

  • lazy

    swift中是通过专门的关键字(lazy)来实现懒加载; 直接懒加载赋值 懒加载赋一个函数 懒加载赋一个闭包 1、...

  • Swift 懒加载Lazy

    对于很多人非常熟悉OC中的懒加载,并且已经达到炉火纯青。 但是在Swift兴风作浪的年代,你好意思不掌握Swift...

  • Swift 懒加载(lazy)

    在做OC项目中经常使用的就是懒加载,重写getter方法, 什么时候用到getter方法什么时候去加载, 并且就加...

  • Swift lazy 懒加载

    应用场景 在使用变量过程中: 当在使用该变量时再初始化加载 在设置懒加载的时候,可以通过 self 设置类的属性、...

  • Swift 懒加载Lazy

    1.Lazy Variables 惰性变量是按需初始化的存储属性,只能在struct或class中使用惰性变量。例...

网友评论

      本文标题:Swift 懒加载Lazy

      本文链接:https://www.haomeiwen.com/subject/kftmvrtx.html