Swift惰性初始化(lazy)属性
发布时间:2020-12-14 02:45:33 所属栏目:百科 来源:网络整理
导读:原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 一 惰性初始化的定义 在Objective C中,惰性初始化是这样写的 @property ( strong , nonatomic ) CAShapeLayer * shapelayer;-(CAShapeLayer *)shapelayer{ if (!_shapelayer) { _shapelayer = [CAShapeLa
原创Blog,转载请注明出处 一 惰性初始化的定义在Objective C中,惰性初始化是这样写的 @property (strong,nonatomic) CAShapeLayer * shapelayer;
-(CAShapeLayer *)shapelayer{
if (!_shapelayer) {
_shapelayer = [CAShapeLayer layer];
}
return _shapelayer;
}
那么何为惰性初始化呢? 二 Swift中的惰性初始化Swift中,有两种方式来惰性初始化。 lazy var first = NSArray(objects: "1","2")
第二种,闭包 lazy var second:String = {
return "second"
}()
三 惰性初始化的使用场景属性本身依赖于外部因素才能初始化 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
}()
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |