语法(四) – 懒加载

温馨提示:本文最后更新于2024-07-27 14:04:55,某些文章具有时效性,若有错误或已失效,请在下方留言

懒加载是统性能优化的方式之一。

懒加载闭包

基本语法,如下所示

lazy var yourVariableName: SomeType = {
    return SomeType(whatever: "foobar")
}()

懒加载闭包代码示例

class Singer {
    let name: String

    init(name: String) {
        self.name = name
    }

    lazy var reversedName = {
        return "\(self.name.uppercased()) backwards is \(String(self.name.uppercased().reversed()))!"
    }()
}

let taylor = Singer(name: "Taylor Swift")
print(taylor.reversedName)

reversedName 属性现在是懒惰的,这意味着只有当我们第一次读取 reversedName 属性时,闭包内部的代码才会被执行。

懒加载方法

我们可以创建方法,将懒属性与它们所依赖的代码分离开来。

class Singer {
    let name: String

    init(name: String) {
        self.name = name
    }

    lazy var reversedName = self.getReversedName()

    private func getReversedName() -> String {
        return "\(name.uppercased()) backwards is \(String(name.uppercased().reversed()))!"
    }
}

let taylor = Singer(name: "Taylor Swift")
print(taylor.reversedName)

懒加载单例

class MusicPlayer {
    init() {
        print("Ready to play songs!")
    }
}

class Singer {
    static let musicPlayer = MusicPlayer()
    
    init() {
        print("Creating a new singer")
    }
}

let taylor = Singer()

Singer.musicPlayer

所有 Swift static let 单子都是自动懒惰的,只有在需要时才会创建。


– 《Pro Swift》
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容