2016-04-29 220 views
0

我想用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

回答

1

你可以初始化變量懶洋洋地

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

謝謝。有效。我認爲懶惰var會工作。懶惰的變數沒有太多的經驗。 –

+0

這是避免可選項的一個非常方便的方法。 – vadian

0

廣場

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

在viewDidLoad中,那麼網點將已設置下面的錯誤dissappears。