Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为';s具有闭包的默认值_Ios_Swift_Delegates_Initialization - Fatal编程技术网

Ios 为';s具有闭包的默认值

Ios 为';s具有闭包的默认值,ios,swift,delegates,initialization,Ios,Swift,Delegates,Initialization,我有一个属于类属性的集合视图,我希望将其设置为: var collectionView: UICollectionView = { let cv = UICollectionView() cv.delegate = self cv.dataSource = self return cv }() 然而,这给了我一个错误,self不是UICollectionViewDelegate/UICollectionViewDataSource类型,这很有意义,因为闭包不是那

我有一个属于类属性的集合视图,我希望将其设置为:

var collectionView: UICollectionView = {
    let cv = UICollectionView()
    cv.delegate = self
    cv.dataSource = self
    return cv
}()
然而,这给了我一个错误,self不是UICollectionViewDelegate/UICollectionViewDataSource类型,这很有意义,因为闭包不是那种类型。我想知道的是,是否可以从闭包内部引用类实例?或者我应该用不同的方法设置委托和数据源吗?我已经搜索了一个解决方案,但没有找到任何关于通过闭包设置委托的内容


谢谢。

您可以将属性从
var
更改为
lazy var
,因为lazy属性只有在第一次使用时才会初始化。因此,这将解决您的问题

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