2014-11-06 1 views
6

Есть ли решение этой проблемы?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' 

я мог бы сделать это необязательным и инициализировать его в методе инициализации, но я искал способ сделать CollectionView подведенной и не a 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") 
    } 
} 
0

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

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

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

@MehulThakkar Я пробовал ваш cade в xCode 6.1, и он не работает. – Greg

1

Установка пусть переменные (константы) в методе инициализации:

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

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

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

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