我可以为我的NSCoding类覆盖swift per-module命名空间吗?
我基本上需要:
Module1.MyCodedClass == Module2.MyCodedClass
我知道我可以将MyCodedClass放在一个动态框架中,但我使用的方法似乎有点过分了:D
可能为某个类设置自定义模块吗?
或告诉nscoder类a == class b ...
答案 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
个对象。