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