Swift&Objective-C程序员iOS学习笔记

swift 中的 lazy

2017-12-20  本文已影响45人  Inlight先森

概念

使用

swift 中我们在变量属性前加 lazy 关键字来指定延迟加载。

OC 中可能是这样的:

@property (copy, nonatomic) NSString *name;

- (NSString *)name {
    if (!_name) {
        _name = @"Inlight";
    }
    return _name;
}

swift 中我们在使用 lazy 修饰属性时,必须声明属性是变量。而且我们需要显示的指定属性的类型。对该属性进行一个赋值语句用来首次访问时使用。

swift 使用方式:

    lazy var name: String = "Inlight"
    
    lazy var planNameLabel: UILabel = {
        let label = UILabel()
        label.text = "yo yo yo kongfu!"
        return label
    }()

拓展

lazy 还可以配合 map filter 这类接受闭包运行的方法一起,使整个行为变成延迟进行的。

    let numbers = 1...5
    let doubleNumbers = numbers.map { (i: Int) -> Int in
        print("numbers\(i)")
        return i * 2
    }

    for i in doubleNumbers {
        print("doubleNumbers\(i)")
    }

打印结果:

numbers1
numbers2
numbers3
numbers4
numbers5
doubleNumbers2
doubleNumbers4
doubleNumbers6
doubleNumbers8
doubleNumbers10

使用 lazy 后得到延迟运行版本的容器

    let numbers = 1...5
    let doubleNumbers = numbers.lazy.map { (i: Int) -> Int in
        print("numbers\(i)")
        return i * 2
    }

    for i in doubleNumbers {
        print("doubleNumbers\(i)")
    }

打印结果:

numbers1
doubleNumbers2
numbers2
doubleNumbers4
numbers3
doubleNumbers6
numbers4
doubleNumbers8
numbers5
doubleNumbers10

对于一些不需要完全运行或者提前退出的情况,使用 lazy 进行性能优化更加有效。

上一篇 下一篇

猜你喜欢

热点阅读