Swift惰性初始化(lazy)属性

原创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是否含有前缀

url:NSStringlazy var completeURL:NSString = {[unowned self] inif 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 ..100000{sum += i}return sum}()

属性不确定是否会使用到

官网的例子,注意,对于Manager来说,使用的时候,可能导入,也可能不倒入数据。从硬盘读取数据的代价是很大的,不导入数据的时候,不要初始化class DataImporter {/*DataImporter .The -.*/}class DataManager {lazy var importer = DataImporter()var data = [String]()}let manager = DataManager()manager.data.append(“Some data”)manager.data.append(“Some more data”)

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

lazy var dataArray:NSMutableArray = {NSMutableArray()for i {array.addObject(NSNumber(integer: i))}return array}()

,其实每一朵花,都有它自己的生命,

Swift惰性初始化(lazy)属性

相关文章:

你感兴趣的文章:

标签云: