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

时间:2018-10-01 13:28:57

标签: ios swift delegates initialization

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

var collectionView: UICollectionView = {
    let cv = UICollectionView()
    cv.delegate = self
    cv.dataSource = self
    return cv
}()

但是这给了我一个错误,那就是self不是UICollectionViewDelegate / UICollectionViewDataSource类型的,这是有道理的,因为闭包不是那种类型。我想知道是否有可能从闭包内部引用类实例?还是应该以其他方法设置委托和数据源?我一直在寻找解决方案,但未找到有关通过闭包设置委托的任何信息。

谢谢。

1 个答案:

答案 0 :(得分:7)

您可以将属性从var更改为lazy var,因为仅在首次使用惰性属性时才初始化它们。这样可以解决您的问题。

lazy var collectionView: UICollectionView = {
    let cv = UICollectionView()
    cv.delegate = self
    cv.dataSource = self
    return cv
}()