在OC中,懒加载配合弱引用使用控件,可以很好的节约内存,提升性能,例如:
/** view */
@property (nonatomic, weak) UIView *aView;
// 懒加载
- (UIView *)aView
{
if (!_aView) {
UIView *v = [[UIView alloc] init];
[self.view addSubview:v];
_aView = v;
}
return _aView;
}
但是转到Swift中,我发现不能再这样写了,比如以下的代码会报错:
lazy weak var aView: UIView? = {
let v = UIView()
self.view.addSubview(v)
return v
}()
/**
上面的代码导致linker报错:
<unknown>:0: error: cannot convert return expression of type 'UIView?' (aka 'Optional<UIView>') to return type 'UIView?'
<unknown>:0: error: cannot assign a value of type 'UIView?' to a value of type 'UIView??'
<unknown>:0: error: cannot assign a value of type 'UIView?' to a value of type 'UIView??'
*/
请问swift中还需要若引用UI控件嘛?若何将懒加载和若引用搭配使用...
报错说得很清楚啊,你定义的是UIView?,但是返回的却是UIView。加上问号就是Optinal变量,和原来就不是一种类型了。而且有了Optinal类型,你就不需要再定义为lazy, 用了lazy就不需要optinal了。为什么要一块用?