我可以为我的 NSCoding 类 覆盖 swift 每个模块的命名空间吗? (我需要 Module1.MyCodedClass == Module2.MyCodedClass)

Can I Override swift per-module namespaces for my NSCoding classes? (I need Module1.MyCodedClass == Module2.MyCodedClass)

我可以为我的 NSCoding class 覆盖 swift 每个模块的命名空间吗?

我基本需要:

Module1.MyCodedClass == Module2.MyCodedClass

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

也许为某个class设置自定义模块?


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

如果主要问题是 NSCoding,我在 class 声明之前使用 @objc() 属性完成了此操作,如下所示:

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

这会导致 NSCoder 仅使用您的 class 的名称而不附加模块名称(如果 class 在 Objective-C 中实现,它会这样做)

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

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

到目前为止,在我的测试中它工作得很好......只要你在尝试解码对象之前为旧的 class 名称设置 class,你应该被设置.每当您尝试解码 Module1.MyCodedClass 个对象时,它会将它们解码为 MyCodedClass 个对象。