是不是功能放在方便初始化 - 在子類中不可用?功能放在一個方便的init - 在子類中不可用?
如果是這樣,爲什麼Cocoa的Swift接口定義瞭如此多的初始化方法是方便的。
例如 - 我有一個NSWindowController的子類,我想創建一個指定的init,它不會得到任何參數,應該直接知道要實例化的NIB文件。
但我沒有任何訪問super.init的方法來獲取已經實現的行爲並在其上構建。這裏是NSWindowController的inits的定義:
class NSWindowController : NSResponder, NSCoding, NSSeguePerforming, NSObjectProtocol {
init(window: NSWindow?)
init?(coder: NSCoder)
convenience init(windowNibName: String)
convenience init(windowNibName: String, owner: AnyObject)
convenience init(windowNibPath: String, owner: AnyObject)
// ...
}
相反,我不得不重新實現NIB加載,從而複製和潛在犯錯。
編輯:
這裏是一個blogpost由邁克灰小通道,提NSWindowController子類和後面我在我的情況下做的理由是完全一樣的:
NSWindowController提供initWithWindowNibName:方法。但是,您的子類只能使用一個筆尖工作,因此讓客戶端指定筆尖名稱是沒有意義的。相反,我們會提供一個簡單的初始化方法,在內部做正確的事情。簡單地覆蓋它超打電話,並提供筆尖名稱:
- (id)init
{
return [super initWithWindowNibName: @"MAImportantThingWindow"];
}
所以它可能在的ObjectiveC,卻怎麼也該在斯威夫特做?
謝謝!我已經編輯了一些答案。我希望那樣更好。 – 2014-11-25 11:02:08