这个问题有解决方案吗?
class ViewController : UIViewController {
let collectionFlowLayout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: collectionFlowLayout)
}
xcode给我以下错误
ViewController.swift: 'ViewController.Type' does not have a member named 'collectionFlowLayout'
我可以将它作为一个可选项并在init方法中初始化它,但我正在寻找一种方法来使collectionview成为let而不是var
答案 0 :(得分:3)
您可以在初始化程序中为初始成员变量指定初始值。没有必要将其设为var
或可选。
class ViewController : UIViewController {
let collectionFlowLayout = UICollectionViewFlowLayout()
let collectionView : UICollectionView
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
{
self.collectionView = UICollectionView(frame: CGRectZero,
collectionViewLayout: self.collectionFlowLayout);
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil);
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
答案 1 :(得分:1)
在init方法中设置let变量(常量):
class ViewController : UIViewController {
let collectionFlowLayout: UICollectionViewFlowLayout!
let collectionView: UICollectionView!
init() {
super.init()
self.collectionFlowLayout = UICollectionViewFlowLayout()
self.collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: collectionFlowLayout)
}
}
我们可以使用self访问let变量。
希望它适合你。
答案 2 :(得分:0)
此时没有创建collectionFlowLayout
所以它抱怨没有这样的成员。
解决方案可以如你所提到的那样使其成为可选项并在init中初始化它,或者你可以这样做:
let collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: UICollectionViewFlowLayout())