变量前的单词在init()中意味着什么?

时间:2014-12-04 03:27:33

标签: swift nscoding decoder nscoder

很抱歉这是一个很糟糕的问题,但我一直在阅读这本快速的书籍和以下教程,我发现了这个NSCoder协议并禁用了它以及诸如此类的东西。

required init(coder aDecoder: NSCoder) {
    fatalError("not been implemented")
}

我理解所需的内容,但我不明白我必须编写的代码。是否说如果通过NSCoder,会发生致命错误?另外,coder这个词是什么意思?为什么我需要在变量名前面?

2 个答案:

答案 0 :(得分:3)

该代码的目的是满足NSCoding协议的要求,该协议表明您必须实现init(coder:),而不必实际上打扰编写该方法的任何有意义的实现。如果您在这里有一些有意义的事情,那么您将删除fatalError行并执行一些有意义的操作。事实上,你说:“我没有这方面的实施,所以如果它被召唤,我们就会遇到严重麻烦,我想故意崩溃!”

单词coder是此参数的“外部名称”。在Swift中,参数可以同时具有内部名称和外部名称。 coder表示,当您调用此函数时,请调用此参数coder:(实际上就是您所做的)。这是绝对必要的,因为这是包括Cocoa在内的世界看到这个功能的方式; coder:是其名称及其身份的一部分。但是,单词aDecoder只是本地参数的内部名称,仅仅是一个服务建议;您可以使用其他内部名称,或者甚至可以删除它,这将使内部名称与外部名称相同。

这里的情况是你重写了Cocoa函数,你必须使用该函数的正确名称。这意味着函数名称,外部参数名称和参数类型。它们必须完全正确,否则它将与您应该重写的功能不同。但内部参数名称是传递给函数体的局部变量,由您决定,如果您愿意,可以更改它们。我经常这样做。

答案 1 :(得分:0)

这意味着此方法未实现。它看起来像某人需要的方法(签名匹配contrat / interface / protocol) - 这就是它获取特定参数的原因(在本例中为aDecoder)。但该方法本身尚未编写。在这些情况下你可以做任何事情,但有时你不想默默地通过,然后你只是像示例代码那样引发错误。这并不是特定于必需的init或编码器。