很抱歉这是一个很糟糕的问题,但我一直在阅读这本快速的书籍和以下教程,我发现了这个NSCoder协议并禁用了它以及诸如此类的东西。
required init(coder aDecoder: NSCoder) {
fatalError("not been implemented")
}
我理解所需的内容,但我不明白我必须编写的代码。是否说如果通过NSCoder,会发生致命错误?另外,coder
这个词是什么意思?为什么我需要在变量名前面?
答案 0 :(得分:3)
该代码的目的是满足NSCoding协议的要求,该协议表明您必须实现init(coder:)
,而不必实际上打扰编写该方法的任何有意义的实现。如果您在这里有一些有意义的事情,那么您将删除fatalError
行并执行一些有意义的操作。事实上,你说:“我没有这方面的实施,所以如果它被召唤,我们就会遇到严重麻烦,我想故意崩溃!”
单词coder
是此参数的“外部名称”。在Swift中,参数可以同时具有内部名称和外部名称。 coder
表示,当您调用此函数时,请调用此参数coder:
(实际上就是您所做的)。这是绝对必要的,因为这是包括Cocoa在内的世界看到这个功能的方式; coder:
是其名称及其身份的一部分。但是,单词aDecoder
只是本地参数的内部名称,仅仅是一个服务建议;您可以使用其他内部名称,或者甚至可以删除它,这将使内部名称与外部名称相同。
这里的情况是你重写了Cocoa函数,你必须使用该函数的正确名称。这意味着函数名称,外部参数名称和参数类型。它们必须完全正确,否则它将与您应该重写的功能不同。但内部参数名称是传递给函数体的局部变量,由您决定,如果您愿意,可以更改它们。我经常这样做。
答案 1 :(得分:0)
这意味着此方法未实现。它看起来像某人需要的方法(签名匹配contrat / interface / protocol) - 这就是它获取特定参数的原因(在本例中为aDecoder)。但该方法本身尚未编写。在这些情况下你可以做任何事情,但有时你不想默默地通过,然后你只是像示例代码那样引发错误。这并不是特定于必需的init或编码器。