Swift "не имеет члена с именем"

есть ли решение этой проблемы ?

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 ответов


вы можете назначить начальные значения постоянным переменным-членам в инициализаторе. Нет необходимости делать это 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")
    }
}

установка переменных let (констант) в методе init:

class ViewController : UIViewController {
    let collectionFlowLayout: UICollectionViewFlowLayout!
    let collectionView: UICollectionView! 

    init() {
        super.init()
        self.collectionFlowLayout = UICollectionViewFlowLayout()
        self.collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: collectionFlowLayout)
    }
}

мы можем получить доступ к переменным let с помощью self.

надеюсь, что это работает для вас.


в этот момент нет collectionFlowLayout создан, поэтому он жалуется, что нет члена с таким именем.

решение может быть, как вы упомянули, чтобы сделать его необязательным и инициализировать его в init или вы можете сделать это:

let collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: UICollectionViewFlowLayout())