原创Blog,转载请注明出处
blog.csdn.net/hello_hwc
在Objective C中,惰性初始化是这样写的
@property (strong,nonatomic) CAShapeLayer * shapelayer;-(CAShapeLayer *)shapelayer{ if (!_shapelayer) { _shapelayer = [CAShapeLayer layer]; } return _shapelayer;}
那么何为惰性初始化呢?
从OC的代码中不难看出,惰性初始化,就是在变量第一次使用的时候才进行初始化。
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)属性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)