2015-05-04 3 views
2

У меня есть пользовательский быстрый подкласс UICollectionViewController, и он имеет свойство unowned var mainController. Я не могу понять, как инициализировать это свойство. Если я попытаюсь инициализировать его перед вызовом super.init, Xcode жалуется на то, что «self» используется до super.init. Если я попытаюсь его инициализировать впоследствии, Xcode жалуется на то, что свойство self.mainController не инициализировано при вызове super.init.Как инициализировать сохраненные сохраненные свойства в быстром подклассе?

В общем, возможно ли иметь незанятую переменную как свойство подкласса в swift?

class CustomCollection: UICollectionViewController { 

    unowned var mainController: MainController 

    convenience init(mainController: MainController) { 
     var collectionViewLayout = UICollectionViewLayout() 
     self.mainController = mainController 
     self.init(collectionViewLayout: collectionViewLayout) 
    } 

    override init(collectionViewLayout layout: UICollectionViewLayout) { 
     super.init(collectionViewLayout: layout) 
    } 
    ... 
} 
+1

Есть только один метод инициализации, где вы устанавливаете значение mainController или инициализировать mainController во всех ваших методов инициализации перед вызовом super.init , – Shoaib

ответ

0

Он не чувствует, как лучшее решение, но это то, что я в конечном итоге делает:

class CustomCollection: UICollectionViewController { 

    unowned var mainController = MainController() 

    convenience init(mainController: MainController) { 
     var collectionViewLayout = UICollectionViewLayout() 
     self.init(collectionViewLayout: collectionViewLayout) 
     self.mainController = mainController 
    } 

    override init(collectionViewLayout layout: UICollectionViewLayout) { 
     super.init(collectionViewLayout: layout) 
    } 

и MainController:

class MainController: UIViewController { 

    lazy var customCollection: CustomCollection = CustomCollection(mainController: self) 

    init() { 
     ... 
    } 
    ... 
} 

@Shoaib правильно, что mainController должен быть инициализирован во всех функциях init, поэтому я просто закончил его инициализацию вверху и снова установил его после вызова super.init().

1

Это, казалось, работал в детской площадки файл для меня ...

class Fruit { 

    var taste:String 

    init(){ 
     taste = "sweet" 
    } 

    deinit{ 
     println("Deinitializing Fruit") 
    } 
} 

class Apple:Fruit{ 

    let color: UIColor 
    unowned var meme:NSObject 

    override init() { 
     color = UIColor.greenColor() 
     meme = "The Big Apple" 
     super.init() 
    } 

    convenience init (newMemeValue: AnyObject) { 
     self.init() 
     self.meme = newMemeValue as! NSObject 
    } 
} 

var redApple:Apple? 
redApple = Apple(newMemeValue: "A Bigger Bite") 
println("\(redApple)") 
var color = redApple!.color 
Смежные вопросы