swift----懒加载

以下三种格式,都不会报错,可是,在编写代码时会有一些问题

1

    lazy var headerImageView:UIImageView = {
        let headerImageView:UIImageView = UIImageView(frame:CGRect.init(x: 0, y: 0, width: self.view.bounds.width, height: 125))
        headerImageView.image = UIImage.init(named: "header-contact")
        return headerImageView
    }()

2

    lazy var headerImageView:UIImageView = {
        let headerImageView = UIImageView(frame:CGRect.init(x: 0, y: 0, width: self.view.bounds.width, height: 125))
        headerImageView.image = UIImage.init(named: "header-contact")
        return headerImageView
    }()

3

    lazy var headerImageView:UIImageView = {
        let headerImageView = UIImageView(frame:CGRect.zero)
        headerImageView.image = UIImage.init(named: "header-contact")
        return headerImageView
    }()

12的差别在于,1使用UIImageView创建了一个对象,并在前面声明了对象类型。结果就是1在输入闭包的第二行代码时有代码提示,而2没有。1中通过类型推断可以得出headerImageView是一个UIImageView对象,而2中确是一个<<error, type>>
原因可以在3中找到答案:使用了self


在懒加载中的self似乎很有问题。

  1. 如果闭包中没有出现过self那么在断点调试的时候也不会得到self对象的内容;可如果出现过,那么在断点调试就可以得到内容;
  2. lazy闭包中的self没有代码提示(起码我是这样的);可是硬把代码刚出来后,确也跑得过;代码跳转什么的完全不是问题;
  3. 就是上面提到的

那么问题来了~!
Why~~~~ 😕

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近想学Swift,因为正好手上有个OC小项目,所以就打算把这个OC小项目翻译成Swift的。 这里记录下遇到的一...
    我不是小兵阅读 5,820评论 0 0
  • 懒加载的2个好处:延迟加载属性(UI类型控件一般都会延迟加载)在后边的代码中,延迟加载的属性,不用再强制解包 懒加...
    Homer1ynn阅读 5,203评论 5 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,367评论 25 709
  • 在程序设计中,我们经常会使用 懒加载 ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITab...
    猫爪阅读 21,269评论 10 56
  • 抱怨的含义,一直不是很懂,是不是说些对现实不满的话就是抱怨呢,又或者,这些话只是倾诉,吐露心声更合适一些呢? 昨天...
    浪漫的高贵阅读 1,625评论 2 4

友情链接更多精彩内容