我可以为我的NSCoding类重写swift每个模块名称空间吗?(我需要Module1.mycodeclass==Module2.mycodeclass)

我可以为我的NSCoding类重写swift每个模块名称空间吗?(我需要Module1.mycodeclass==Module2.mycodeclass),swift,namespaces,nscoding,Swift,Namespaces,Nscoding,我可以为我的NSCoding类重写swift每个模块名称空间吗 我基本上需要: Module1.MyCodedClass == Module2.MyCodedClass 我知道我可以将mycodeclass放在一个动态框架中,我使用这种方法,但这似乎有些过分:D 可能为某个类设置自定义模块 或者告诉nscoder class a==class b…如果主要问题是NSCoding,我在类声明之前使用@objc()属性这样做: @objc(MyCodedClass) class MyCoded

我可以为我的NSCoding类重写swift每个模块名称空间吗

我基本上需要:

Module1.MyCodedClass == Module2.MyCodedClass

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

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



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

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

@objc(MyCodedClass) class MyCodedClass: NSObject, NSCoding {
...
}
[NSKeyedUnarchiver setClass:[MyCodedClass class] forClassName:@"Module1.MyCodedClass"];
这会导致NSCoder只使用类的名称,而不附加模块名(如果类是在Objective-C中实现的,它会这样做)

还有-这是我刚刚学到的,完全解决了我面临的一个问题。在我对编码类进行上述@objc()修复之前,我有几个版本的应用程序,因此基本上有
Module1.mycodeclass
的编码版本(存储在数据库中),现在我需要能够将它们解码为
mycodeclass
对象。您可以在
NSKeyedUnarchiver
中这样做:

@objc(MyCodedClass) class MyCodedClass: NSObject, NSCoding {
...
}
[NSKeyedUnarchiver setClass:[MyCodedClass class] forClassName:@"Module1.MyCodedClass"];

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

可能我误解了。为什么在两个不同的框架中需要相同的类定义?如果它们略有不同,那么它们就不相等,如果它们完全相同,那就是代码重复。应用程序a和应用程序b。。。正如我所说的,一个框架似乎有些过分了。。。只是为了得到相同的名称空间。[苹果也不鼓励链接太多框架;)]我不想在a和b之间共享代码。实现者之间应该只有一个共同的“契约”,你可以将MyCodeClass放在同一个工作区(但在任何一个应用程序之外),然后让每个应用程序引用同一个文件吗?这可能会影响版本控制。谢谢!就是这样。。我用过setClass,但我不太喜欢。虽然我同意这对你来说真的很有用!:)