我从Swift编译器那里得到了一个奇怪的错误消息:
<unknown>:0: error: 'required' initializer 'init(arrayLiteral:)' must be provided by subclass of 'NSSet'
Foundation.NSSet:2:33: note: 'required' initializer is declared in superclass here
required public convenience init(arrayLiteral elements: Any...)
^
请注意,我的代码中没有一个是继承自NSSet
(也不是Set
)的。因此,我不知道为什么Swift会认为我在这样做,更不用说是错误的了。
我的项目有些特殊,我有一些Objective-C类通过Objective-C调用C++代码,并使用module.map
文件让Swift调用C库。
当编译Swift文件时出现错误(我从几个Swift文件中得到它,但只有其中一些使用C库,但所有这些文件似乎都在与ObjC类交互)。如您所见,Swift对其错误没有行号,其中有人正在继承NSSet。
有人看到过这种情况吗?有人知道如何诊断此问题吗?我尝试注释掉代码的部分内容,但似乎找不到任何有助于跟踪此问题的东西。
强调一下:我没有对NSSet进行任何子类化。我甚至认为我的代码中没有使用NSSet。这似乎是Swift编译器编造的东西。
更新:另一个问题给了我这样的想法,它可能与从Class对象实例化实例有关。我有一个类,其中包含后来要实例化的一个Class:
@interface MYInfo : NSObject
@property Class myClass;
@end
然后我使用Swift来实例化它:
guard let myClass = info.myClass.init() as? MyClass else { return }
如果我删除这最后一行,则错误信息消失。