2014-11-06 37 views
6

Esiste una soluzione per questo problema?Swift 'non ha un membro chiamato'

class ViewController : UIViewController { 
    let collectionFlowLayout = UICollectionViewFlowLayout() 
    let collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: collectionFlowLayout) 
} 

Xcode mi dà il seguente errore

ViewController.swift: 'ViewController.Type' does not have a member named 'collectionFlowLayout' 

ho potuto fare un optional e l'inizializzazione nel metodo init, ma sto cercando un modo per rendere il CollectionView un let e non a var

risposta

3

È possibile assegnare valori iniziali a variabili membro costanti nel proprio inizializzatore. Non è necessario renderlo un var o facoltativo.

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

A quel punto non c'è collectionFlowLayout creato in modo che si lamenta che non vi è alcun membro chiamato così.

La soluzione può essere come lei ha ricordato di renderlo facoltativo e inizializzare in init o si può fare questo:

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

@MehulThakkar Ho provato il tuo cade in xCode 6.1 e non funziona. – Greg

1

Impostazione lasciare variabili (costanti) nel metodo init:

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

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

Possiamo accedere alle variabili let con self.

Spero che funzioni per voi.

Problemi correlati