首页 > 在Swift中如何懒加载一个弱引用控件

在Swift中如何懒加载一个弱引用控件

在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了。为什么要一块用?

【热门文章】
【热门文章】