Swift惰性初始化(lazy)属性

Swift惰性初始化(lazy)属性,第1张

概述原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 一 惰性初始化的定义 在Objective C中,惰性初始化是这样写的 @property (strong,nonatomic) CAShapeLayer * shapelayer;-(CAShapeLayer *)shapelayer{ if (!_shapelayer) { _shapel

原创Blog,转载请注明出处
blog.csdn.net/hello_hwc

一 惰性初始化的定义

在Objective C中,惰性初始化是这样写的

@property (strong,nonatomic) CAShapeLayer * shapelayer;-(CAShapeLayer *)shapelayer{    if (!_shapelayer) {        _shapelayer = [CAShapeLayer layer];    }    return _shapelayer;}

那么何为惰性初始化呢?
从OC的代码中不难看出,惰性初始化,就是在变量第一次使用的时候才进行初始化。

二 Swift中的惰性初始化

Swift中,有两种方式来惰性初始化。
第一种,简单表达式

lazy var first = NSArray(objects: "1","2")

第二种,闭包

lazy var second:String = {        return "second"        }()


注意

不要忘记最后的小括号,只有加了小括号,必包才会在掉用的时候立刻执行。 要类型声明lazy var second:String,这样Xcode会进行类型检查。 三 惰性初始化的使用场景

属性本身依赖于外部因素才能初始化
completeURL表示完整的URL,这个变量依赖于自身的url是否含有http://前缀

class Demo{    var url:Nsstring    lazy var completeURL:Nsstring = {        [uNowned self] in        if self.url.hasPrefix("http://"){            return self.url        }else{            return "http://".stringByAppendingString(self.url)        }        }()    init(url:Nsstring){        self.url = url    }}

属性需要复杂计算,消耗大量cpu

lazy var second:Int = {        var sum = 0        for i in 1...100000{            sum += i        }        return sum        }()

属性不确定是否会使用到

官网的例子,注意,对于Manager来说,使用的时候,可能导入,也可能不倒入数据。从硬盘读取数据的代价是很大的,不导入数据的时候,不要初始化class Dataimporter {    /*    Dataimporter is a class to import data from an external file.    The class is assumed to take a non-trivial amount of time to initialize.    */    var filename = "data.txt"    // the Dataimporter class would provIDe data importing functionality here}class DataManager {    lazy var importer = Dataimporter()    var data = [String]()    // the DataManager class would provIDe data management functionality here}let manager = DataManager()manager.data.append("Some data")manager.data.append("Some more data")

定制化的初始化
有些初始化只需要初始化一次,在变量定义的地方初始化,有助于代码维护

lazy var dataArray:NSMutableArray = {        var array = NSMutableArray()        for  i in 1...100{            array.addobject(NSNumber(integer: i))        }        return array        }()
总结

以上是内存溢出为你收集整理的Swift惰性初始化(lazy)属性全部内容,希望文章能够帮你解决Swift惰性初始化(lazy)属性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存