初始化从视图控制器的IBoutlet变量初始化的变量?

问题描述:

我想用termAndDefTable和copyNPasteTable作为输入初始化变量deckEditorModel。我不想让deckEditorModel成为一个可选变量,因为我知道我不能在C中使用这种策略。我尝试将deckEditorModel放入视图控制器的init方法中,但似乎所需的termNDefTable: termAndDefTable, otherTable: OtherTable不适用于在init中使用它们作为输入,因为它们是IBOutlets。有人会如何去吗初始化从视图控制器的IBoutlet变量初始化的变量?

import Cocoa 

class DeckEditorViewController: NSViewController { 

    @IBOutlet weak var importToolsView: NSView! 
    @IBOutlet weak var termAndDefTable: NSTableView! 
    @IBOutlet weak var otherTable: NSTableView! 

    var deckEditorModel:DeckEditorModel? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do view setup here. 
     self.view.wantsLayer = true 
    } 

    override func awakeFromNib() { 
     deckEditorModel = DeckEditorModel(termNDefTable: termAndDefTable, otherTable: otherTable) 
    } 

我试着将它添加到viewDidLoad中,但显然是晚来定义deckEditorModel。当deckEditorModel是一个可选

The below error dissappears when deckEditorModel is an optional

+0

为什么要避免斯威夫特构造简单,因为他们没有在C语言?你打算把你的代码移植到C吗? – Caleb

你可以初始化变量懒洋洋地

lazy var deckEditorModel : DeckEditorModel = { 
    return DeckEditorModel(termNDefTable: self.termAndDefTable, otherTable: self.otherTable) 
}() 
+0

谢谢。有效。我认为懒惰var会工作。懒惰的变数没有太多的经验。 –

+0

这是避免可选项的一个非常方便的方法。 – vadian

广场

deckEditorModel = DeckEditorModel(termNDefTable: termAndDefTable, otherTable: otherTable) 

在viewDidLoad中,那么网点将已设置下面的错误dissappears。