当我声明我的集合视图时,我得到了错误“无法将类型(类)的值赋给类型UICollectionViewDelegate,UICollectionViewDataSource":
let collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
return collectionView
}()但是当我添加"lazy var“时,这个错误就消失了。我也不知道原因?有人能给我解释一下吗?
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
return collectionView
}()发布于 2019-09-19 19:42:04
let collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
return collectionView
}()在self初始化之前,您不能访问self。因为到目前为止还没有你的类的对象。实例方法和变量属于类的对象,而不属于类,即它们可以在创建类的对象后调用。所以它会给你一个错误。
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
return collectionView
}()lazy var指示在初始化时跳过此变量。如果任何变量被标记为惰性,它将不会被分配,直到它第一次被使用。您已将此计算变量标记为惰性。因此,当它被类中的任何函数使用时,它总是会得到类(self)的对象分配。
发布于 2019-09-19 19:25:34
闭包是在初始化期间调用的,因此您还不能使用self来访问实例的任何属性或方法。如果您需要访问self,则必须将字母替换为lazy var。
let collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.delegate = self // You cannot use
collectionView.dataSource = self // You cannot use
return collectionView
}()发布于 2019-09-19 19:29:15
添加惰性会强制iOS仅在第一次需要时检查collectionView的实例化。因此,它不会在编译时给你一个错误。在此之前,它给出了一个错误,因为初始化尚未完成,而您正在设置相同的属性。
https://stackoverflow.com/questions/58009479
复制相似问题