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中确是一个<>
原因可以在3中找到答案:使用了self


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

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

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

你可能感兴趣的:(swift----懒加载)