我可以为我的NSCoding类覆盖swift per-module命名空间吗? (我需要Module1.MyCodedClass == Module2.MyCodedClass)

时间:2016-08-18 07:50:43

标签: swift namespaces nscoding

我可以为我的NSCoding类覆盖swift per-module命名空间吗?

我基本上需要:

Module1.MyCodedClass == Module2.MyCodedClass

我知道我可以将MyCodedClass放在一个动态框架中,但我使用的方法似乎有点过分了:D

可能为某个类设置自定义模块吗?

或告诉nscoder类a == class b ...

1 个答案:

答案 0 :(得分:2)

如果主要问题是NSCoding,我在类声明之前使用@objc()属性完成了这个:

@objc(MyCodedClass) class MyCodedClass: NSObject, NSCoding {
...
}

这会导致NSCoder仅使用您的类的名称而不附加模块名称(如果在Objective-C中实现该类,它将采用的方式)

此外 - 这是我只是学到的东西,完全解决了我面临的问题。在我对编码类进行上述@objc()修复之前,我有几个版本的应用程序版本,因此基本上编码版本的Module1.MyCodedClass浮动(存储在数据库中)我需要能够现在简单地将它们解码为MyCodedClass个对象。您可以在NSKeyedUnarchiver中执行此操作:

[NSKeyedUnarchiver setClass:[MyCodedClass class] forClassName:@"Module1.MyCodedClass"];

到目前为止,在我的测试中它完美地工作...只要你在尝试解码对象之前设置旧类名的类,就应该设置它。每当您尝试解码Module1.MyCodedClass个对象时,它都会将它们解码为MyCodedClass个对象。