Swift'没有名为'的成员

时间:2014-11-06 09:30:16

标签: ios xcode swift var let

这个问题有解决方案吗?

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

3 个答案:

答案 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())