为闭包中具有默认值的属性设置委托

kin*_*rth 0 delegates initialization ios swift

我有一个集合视图,这是一个类属性,我想这样设置:

var collectionView: UICollectionView = {
    let cv = UICollectionView()
    cv.delegate = self
    cv.dataSource = self
    return cv
}()
Run Code Online (Sandbox Code Playgroud)

然而,这给了我一个错误,即self不是UICollectionViewDelegate/UICollectionViewDataSource类型,这是有道理的,因为闭包不是那种类型.我想知道是否可以从闭包内部引用类实例?或者我应该以不同的方法设置委托和数据源?我已经搜索了一个解决方案但没有找到任何关于通过闭包设置委托的事情.

谢谢.

Aak*_*ash 7

您可以将属性更改varlazy var,因为只有在第一次使用它们时才会初始化惰性属性.所以这将解决您的问题.

lazy var collectionView: UICollectionView = {
    let cv = UICollectionView()
    cv.delegate = self
    cv.dataSource = self
    return cv
}()
Run Code Online (Sandbox Code Playgroud)