如何在Swift中初始化新的NSDocument实例?

时间:2014-12-29 19:34:42

标签: swift nsdocument

Apple文档建议覆盖NSDocument方便init(initWithType:error :),如here所述。

但是,由于这是一个方便的初始化,我无法覆盖它。但是我仍然需要在创建新文档时执行一些代码。我加载文档时不想执行该代码。

在我的特定情况下,我尝试初始化NSPersistentDocument,但我怀疑这是否相关。

我该怎么办?

2 个答案:

答案 0 :(得分:10)

以上回答适用于Swift 1。

必须在Swift 2中将其更改为以下答案:

convenience init(type typeName: String) throws {
    self.init()
    // Rest of initialization code here
}

这回答:http://meandmark.com/blog/2015/07/nsdocument-initwithtype-in-swift-2/

为方便起见,因为这是一个常见问题。

答案 1 :(得分:8)

执行新文档的初始化代码:

// Create new document (only called for new documents)
convenience init?(type typeName: String, error outError: NSErrorPointer) {
    self.init()
    fileType = typeName
    // add your own initialisation for new document here
}

Swift中的问题是你不能在super中调用一个方便的初始化器。相反,您必须委托自己指定的初始化程序。这意味着你不能利用任何超级便利初始化器,你必须实现自我初始化 - 因此fileType = typeName以上。尽管我喜欢Swift,但我觉得这很愚蠢:重新实现可以重用的代码有什么意义呢?